ES6中定义了7种数据类型:String, Number, Boolean, Symbol, Null, Undefined, Object,其中Symbol是ES6才新引入的数据类型。
JavaScript拥有动态类型
JavaScript的变量可以用来存储不同类型的数据
var a = 1;
a = 'mike';
也是合法的。
Undefined
变量被声明时如果没有被赋值,那么变量的类型就是Undefined。
Null
Null类型只有一个值null,是空值的意思,可以通过给变量赋值设置为null,表示清空该变量。
typeof(null) 返回 object
在JavaScript中,typeof(null)的返回值是object,这并不是说值为null的变量的类型是object,这是一个历史遗留问题,1995年第一版的JavaScript所有值都用32位二进制数来存储,其中包括存储数据类型的标签和存储数据的值,而object类型的标签和null类型的标签都是000,因此typeof(null)的返回值是object,从逻辑上来讲,null也可以是空对象。
但是,null的数据类型仍然是Null,typeof(null)返回object是一个历史遗留bug,而且应该不会被修复,因为这会影响到已有的代码。
Boolean
Boolean类型只有两个值,true和false,布尔型变量一般用于条件判断。
其他类型的变量也可以通过Boolean()函数来转换成布尔型变量,其值对应表如下:
type | 转换为true | 转换为false |
---|---|---|
Undefined | 不适用 | undefined |
Null | 不适用 | null |
Number | 非0,NaN的数字 | 0,NaN |
String | 任何非空字符串 | ''空字符串 |
Symbol | 任何对象 | 不适用 |
Object | 任何对象 | null |
Number
Number类型的值可以是-(2的63次方-1) ~ (2的63次方-1)的数字,+Infinity, -Infinity, NaN。
Number类型的变量不区分整数和浮点数,很大或很小的数会通过科学记数法来表达。
这里要注意的是,NaN与任何Number类型的值都不相等,包括NaN本身。
String
String类型用来存储文本,可以用单引号或双引号表示字符串
var name = 'Jack';
var name = "Jack";
JavaScript中有多种操作String的方法,具体见JavaScript String 对象
Symbol
ES6引入Symbol的目的就在于引入一种机制,保证对象的每个属性名字都是独一无二的,防止属性名冲突。
symbol值通过Symbol()函数生成,可以用作对象的属性名,如
var name = Symbol();
var age = Symbol();
var student = {};
student[name] = 'Jack';
student[age] = 12;
由于Symbol类型的变量是独一无二的,即使给Symbol()函数传入相同的参数,生成的Symbol变量也是不同的,因此
var a = Symbol();
var b = Symbol();
var c = Symbol("name");
var d = Symbol("name");
a === b; //false
c === d; //false
Symbol类型的属性不能用for...in, for...of去遍历,需要用Object.getOwnPropertySymbols方法去遍历
var a = Symbol();
var b = Symbol();
var c = Symbol();
var car = {
[a] : 'Benz',
[b] : 'Tesla',
[c] : 'Volvo'
}
for(let prop of Object.getOwnPropertySymbol(car)){
document.write(car[prop]);
}
Object
对象由{}声明,{}内的时形式为key: value的键值对,其中的key只能是Srting或者Symbol类型的变量,多个键值对之间用逗号隔开,如
student = {
name : 'Jack',
age : 12,
id : 2001
};
网友评论