`
zhouyrt
  • 浏览: 1173090 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JavaScript中“基本类型”之争

 
阅读更多

前端面试中常被问到的问题之一就是“JavaScript的基本类型有几种?”。

有的回答“数字、字符串、布尔”,有的可能会再加上“Null、Undefined”。而有人可能认为“object”也是基本类型。到底是什么样呢?

 

所谓“基本类型(primitive types)”的概念ECMAScript(V3,V5)中压根就没有,它只是将类型分为6种。

ECMAScript只提到类型,用types表示,在V3,V5整个文档搜关键字“primitive”也没见“primitive type”,“primitive value”倒是有,如true/false/0-9等。这说明规范压根就没有所谓的“基本类型”、“原始类型”一说(primitive types)。如果非要说有那么object明显也是,即有6种基本类型。

 

一些书籍却经常使用这个概念,如《JavaScript高级程序设计》第一版、第二版,第三版。

第一版提到有5种原始类型,即Undefined、Null、Boolean、Number、String



 

第二版和第三版又搞出了个simple data type,翻译为简单数据类型(也称为基本数据类型),称对象为复杂数据类型。


 

另一本经典书《JavaScript权威指南(第6版)》第3章也提到了primitive types

先分为基本类型(primitive types)和对象类型,基本类型又分为数字,字符串,布尔,及两个特殊null,undefined。

 

5年前JavaScript方面的书籍还很少,这两本书就是其中之二,影响也很大,可谓经典。因此受此影响的JSer不乏少数。我想书作者把语言类型分为基本类型(元类型)和对象类型(复杂类型)也是符合学习逻辑的,复杂类型由简单类型组合而成。另外也是受到其它语言如Java的影响,它们也是把类型分为基本类型(8种)和对象类型。

但ECMAScript中没有所谓的primitive types,就好比它没有类(class)的概念一样(具有其它语言能力的人仍然喜欢在JavaScript使用名词“类”)。它里面提到的就是类型,可以把它理解成基本类型,但也应该是6种。这里的基本类型也不是Java中的基本类型,因为它包含了复杂数据类型-对象。

 

不是所有的书都认为JavaScript中基本类型只有5种(不包括对象),《JavaScript语言精髓与编程实践》认为是6种,如下


 
它没有将null归为其中,却增加了function类型。 它的依据是typeof的结果只有6种(仅含ES自身,不包括宿主对象),如下

var a = 1, b = '2', c = true, d, e = null, f = function(){}
 
typeof a === 'number'; // true
typeof b === 'string';    // true
typeof c === 'boolean'; // true
typeof d === 'undefined'; // true
typeof e === 'object'; // true
typeof f === 'function'; // true

一共是6中类型,注意null的类型时object。有的书说null的实现是当初的一个错误,谁知道呢。

 

我们来看wiki中基本数据类型的定义

  • a basic type is a data type provided by a programming language as a basic building block. Most languages allow more complicated composite types to be recursively constructed starting from basic types.
  • a built-in type is a data type for which the programming language provides built-in support. In most programming languages, all basic data types are built-in. In addition, many languages also provide a set of composite data types. Opinions vary as to whether a built-in type that is not basic should be considered "primitive".

 

翻译一下

  • 基本类型是这样一种数据类型,它是由编程语言提供的最基本的构建块,多数语言还允许众多复杂的由基本类型组成的复合数据类型
  • 内置类型是由编程语言自身提供的类型,多数编程语中所有的基本类型都是内置的。此外,很多语言还提供一组复合数据类型。一个内置类型是不是该认为是“原始的”的类型这个一直存在争议。

下次再有人问这个问题如何作答呢?

 

  • 大小: 21.3 KB
  • 大小: 34.6 KB
  • 大小: 40.9 KB
  • 大小: 30.6 KB
  • 大小: 73 KB
分享到:
评论

相关推荐

    跟我学习javascript的基本类型和引用类型

    JavaScript中的数据类型分为两大类:基本类型和引用类型。基本类型包括undefined、boolean、number、string和null。这些类型的数据是存储在栈中的,它们是不可变的,也就是说一旦创建了基本类型的变量,就不能更改其...

    javascript基本语法讲解

    这一特性使得JavaScript成为互联网应用开发的首选语言之一,无论是桌面端还是移动端,都能看到JavaScript的身影。 JavaScript的应用领域非常广泛,包括但不限于网页动态效果、表单验证、Ajax异步通信、前端框架(如...

    JavaScript中“基本类型”之争小结

    前端面试中常被问到的问题之一就是“JavaScript的基本类型有几种?”。 有的回答“数字、字符串、布尔”,有的可能会再加上“Null、Undefined”。而有人可能认为“object”也是基本类型。到底是什么样呢? 所谓...

    01 JavaScript基本语法

    JavaScript基本语法JavaScript基本语法JavaScript基本语法JavaScript基本语法

    JavaScript之数据类型

    是JavaScript之数据类型 的基本讲解,适用于javascript的初学者学习javascript的数据类型,应该有帮助

    JavaScript之引用类型介绍

    与基本类型不同,基本类型(如String、Number、Boolean等)的值是直接存储在栈内存中的,而引用类型的值则存储在堆内存中,变量仅存储对这些对象的引用,而不是对象本身。这使得引用类型可以拥有更复杂的数据结构和...

    JavaScript基础知识之数据类型

    数据类型 JavaScript中有5种简单数据类型(也称为基本数据类型):Undefined、Null、Boolean、Number和String。还有1种复杂数据类型——Object,Object本质上是由一组无序的名值对组成的。 typeof操作符 介于...

    JavaScript基本数据类型及值类型和引用类型

    变量在JavaScript中扮演着关键角色,它们是存储值的容器。定义变量使用`var`关键字,例如`var name;`。变量可以在声明时或之后进行初始化,如`var name = "jwy";`。值得注意的是,JavaScript允许不同数据类型的变量...

    javascript中的五种基本数据类型

    在javascript中申明变量使用的关键字都是var,这点与其他的编程语言不尽相同,但是javascript亦含有五种基本的数据类型(也可以说是简单数据类型),它们分别是:Undefined,Null,Boolean,Number和String。...

    JavaScript基本语法.pdf

    在JavaScript中,关键字、函数名、变量和其他标识符都是大小写敏感的。这意味着`password`和`Password`被视为两个不同的变量,编程时需注意保持一致的大小写规范。 3. **语句结束标记** 分号(;)用于表示...

    JavaScript中数据类型转换总结

    javascript技巧,JavaScript中数据类型转换总结,轉載自腳本之家

    JavaScript基本语法.ppt

    JavaScript基本语法.ppt,非常适合初学者,用后会帮助你很多

    javascript数据类型 -JavaScript优势简介及数据类型

    在JavaScript中,使用`var`关键字声明变量,由于它是弱类型语言,所以变量可以存储任何类型的数据。声明变量的示例如下: ```javascript // 单个变量声明 var money; var name; // 多个变量声明 var money, name; ...

    JavaScript标准参考教程

    数据类型转换章节介绍了在JavaScript中进行数据转换的各种方法和规则。了解这些规则对于避免类型相关的bug和提升代码的健壮性非常重要。 错误处理机制章节介绍了JavaScript中的Error对象、throw语句、try...catch...

    javascript最常用数据类型转换(最全).doc

    JavaScript 中有多种数据类型,包括数值类型、字符串类型、布尔类型等。这些类型之间可以进行转换,以下是 JavaScript 中最常用的数据类型转换方法。 一、转为字符串 在 JavaScript 中,可以使用两种方法将其他...

    JavaScript 基本构造图.zip

    10. **字符串函数**:JavaScript中的字符串是不可变的,但提供了大量处理字符串的方法,如substring、indexOf、trim、concat、split、join等,以及模板字符串(ES6引入)和字符串的replace方法支持正则表达式,提高...

Global site tag (gtag.js) - Google Analytics