说在前面的一些话:
关于Javascript和其他编程语言如:Java、PHP、Scala、Go、Rust等等,大家都想把自己想要的东西加入编程语言里面,故而编程语言层出不穷。对于我来说,既开心又苦恼,开心的是有新鲜的东西出来了可以尝尝鲜,苦恼的是我该学哪一个呢,我又要学习了。。。
那么如何学习一门新的编程语言呢?还是得从其类型系统说起,私以为理解一个编程语言的类型系统就是学习和探究这门语言的第一步!
原始类型:
- number、string、布尔
console.log(typeof 5);
console.log(typeof 5.1);
console.log(typeof '');
console.log(typeof "a");
console.log(typeof false);
"number"
"number"
"string"
"string"
"boolean"
经常容易被误会的是number类型,这里无论是5还是5.1,在js中没有专门区分是整数还是浮点数,统一都是number。
另外,字符串也是基本数据类型,与其他语言不同:如Java等,js中没有字符类型,因为实际上使用字符串就已经足够了,并且''与""都表示字符
串,它们之间基本上没有任何区别。
特殊原始值:
- undefined、null
”null(空)和undefined(未定义),它们不是数字、字符串和布尔值。它们通常分别代表了各自特殊类型的唯一成员。“
上面这段话摘自《JavaScript权威指南(第6版)》第3章,其含义很明确,它们虽然可以看做是数据类型,但我觉得直接把它们当做特殊的”值“更加容易理解。
对象类型:
除了上面提到的数据类型之外,其余的就是对象类型了。
在js中只有对象没有类,对象是无序的键/值对的集合,除了普通的object,还有比较特殊的对象如:global object、array、function等。
具体对象方面的内容,在后续章节记录。
基本类型的特殊规则:
除了undefined和null之外,其余的原始类型如:string、number、布尔都有一些令人意想不到的特性:
var s = '4';
s.name = 'four';
console.log(s.name);
console.log(s);
4
undefined
var s = 1;
s.name = 'one';
console.log(s.name);
console.log(s);
1
undefined
(布尔类似,这里不再举例)
也就是说所有基本类型(除了undefined、null),当给原始类型值上添加属性时,js会暂时将原始类型值隐式地转换为其封装类型,字符串转换为String,数字转换为Number,布尔值转换为Boolean。即上面添加name属性时js做了隐式转换,故这时不会报错,然后添加属性之后再立即打印name时却发现其未定义,这是因为原始类型转换为封装类型之后立马又被销毁了,转换后的封装对象只存在于添加name属性并复制的哪一行代码而已。