类型
对语言引擎和开发人员来说,类型是值的内部特征,它定义了值的行为,以使其区别于其他值。例:语言引擎和开发人员对42和"42"采取不同的处理方式,那就说明它们是不同的类型。
内置类型
JavaScript有七种内置类型:
- 空值(null)
- 未定义(undefined)
- 布尔值(boolean)
- 数字(number)
- 字符串(string)
- 对象(object)
- 符号(symbol,ES6新增)
JS存在的bug:typeof null 的值是object。
JS中的变量是没有类型的,只有值才有类型。
typeof 运算符总是会返回一个字符串: typeof typeof 42; // "string"
数组
使用delete运算符可以将单元从数组中删除,但是单元删除后,数组的length属性并不会发生变化。
数组通过数字进行索引,但有趣的是它们也是对象,所以也可以包含字符串键值和属性 (但这些并不计算在数组长度内):
var a = [ ];
a[0] = 1;
a["foobar"] = 2;
a.length; // 1
a["foobar"]; // 2
a.foobar; // 2
这里有个问题需要特别注意,如果字符串键值能够被强制类型转换为十进制数字的话,它就会被当作数字索引来处理。
var a = [ ];
a["13"] = 42;
a.length; // 14
在数组中加入字符串键值 / 属性并不是一个好主意。建议使用对象来存放键值 / 属性值, 用数组来存放数字索引值。数组在进行数字索引的时候会进行默认的强制类型转换,将索引的类型强制转换为数字类型,成功的话按照数字索引,否则按照字符索引。
JS中字符串是不可变的,数组是可变的。(字符串和字符数组的差异,只是“像”,两者有着本质上的区别)
这只是部分,后续更新剩余内容。