最新的 ECMAScript 标准定义了两大类 7 种数据类型:
-
第一类 - 原始类型(即基本类型6 种):
- Number
- String
- Boolean
- Null
- Undefined
- Symbol(ECMAScript 6 新定义)
-
第二类 - 对象类型(即引用类型1种)
- Object
Number
JavaScript 不区分整数和浮点数,统一用Number表示:基于 IEEE 754 标准的双精度 64 位二进制格式的值(-(2^63 -1) 到 2^63 -1)。
123; // 整数123
0.456; // 浮点数0.456
1.2345e3; // 科学计数法表示1.2345x1000,等同于 1234.5
-99; // 负数
NaN; // NaN表示Not a Number,当无法计算结果时用 NaN 表示
Infinity; // Infinity 表示无限大
// 当数值超过了JavaScript的Number所能表示的最大值时,就表示为Infinity
String
字符串是以单引号'或双引号"括起来的任意文本,比如'abc',"xyz"等等。
它是一组16位的无符号整数值的“元素”。在字符串中的每个元素占据了字符串的位置。第一个元素的索引为0,下一个是索引1,依此类推。字符串的长度是它的元素的数量。
不同于类 C 语言,JavaScript 字符串是不可更改的。这意味着字符串一旦被创建,就不能被修改。但是,可以基于对原始字符串的操作来创建新的字符串。例如:
- 获取一个字符串的子串可通过选择个别字母或者使用
String.substr()
. - 两个字符串的连接使用连接操作符 (
+
) 或者String.concat()
.
Boolean
布尔表示一个逻辑实体,可以有两个值:true
和 false
。
Null
只有一个值 null
。null
表示一个“空”的值,它和 0 以及空字符串 ''
不同,0 是一个数值,''
表示长度为 0 的字符串,而 null
表示“空”。
在其他语言中,也有类似 JavaScript 的 null
的表示,例如 Java 也用 null
,Swift 用 nil
,Python 用 None
表示
Undefined
一个没有被赋值的变量会有(1)个默认值 undefined
。
JavaScript 的设计者希望用 null
表示一个空的值,而 undefined
表示值未定义。事实证明,这并没有什么卵用,区分两者的意义不大。大多数情况下,我们都应该用 null
。undefined
仅仅在判断函数参数是否传递的情况下有用。
Symbols
符号(Symbols)是 ECMAScript 第6版新定义的。符号类型是唯一的并且是不可修改的, 并且也可以用来作为 Object 的 key 的值。在某些语言当中也有类似的原子类型(Atoms)。你也可以认为为它们是 C 里面的枚举类型。
ES5 的对象属性名都是字符串,这容易造成属性名的冲突。比如,你使用了一个他人提供的对象,但又想为这个对象添加新的方法(mixin 模式),新方法的名字就有可能与现有方法产生冲突。如果有一种机制,保证每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的冲突。这就是 ES6 引入Symbol的原因。
Object
在计算机科学中, 对象是指内存中的可以被 标识符 引用的一块区域。
在 Javascript 里,对象可以被看作是一组属性的集合。用对象字面量语法来定义一个对象时,会自动初始化一组属性。(也就是说,你定义一个 var a = "Hello"
,那么 a
本身就会有 a.substring
这个方法,以及 a.length
这个属性,以及其它;如果你定义了一个对象,var a = {}
,那么 a
就会自动有 a.hasOwnProperty
及 a.constructor
等属性和方法。)而后,这些属性还可以被增减。属性的值可以是任意类型,包括具有复杂数据结构的对象。属性使用键来标识,它的键值可以是一个字符串或者符号值(Symbol)。
ECMAScript 定义的对象中有两种属性:数据属性和访问器属性。
参考
1、JavaScript 教程 - 数据类型和变量
2、JavaScript 数据类型和数据结构