数组是一种特殊的对象
- 数组是一种特殊的对象 , 访问数组元素的方括号和访问对象属性的方括号是类似的
- javascript会把类型为数值的索引转换成字符串, 即索引数值1, 会转换成字符串"1", 再将这个字符串转换成属性名 , 这个从数值到字符串的转换没有什么特别的, 使用普通字符串也可以
let o={}
o[1]="one"
o["1"]
明确索引的范围
- 需要注意的是 , 必须明确区分索引和对象的属性名 .所有的索引都是属性名, 但是只有介于0和2^32-2之间才是索引
- 全部的数组都是对象, 可以在数组上以任意名字创建属性 , 可以在数组上以任意名字创建属性, 但是如果属性是数组索引, 数组会有特殊的行为 ,就是自动按需更新其length属性
- 可以用负数或者是非整数值来索引数组, 此时数值会转换成字符串 , 这个字符串会作为属性名 .
- 因为这个名字是非负整数 , 所以会被当成常规的对象属性, 而不是数组索引
- 如果使用非负整数的字符串来索引数字, 那这个值会成为数组索引, 而不是对象属性 .
- 如果用了和整数数值上相等的浮点数也是如此
a[1.000]=1
a[-1.23]=true
a["1000"]
javascript中的数组没有所谓的"越界"
- 这是因为数组索引其实就是一种特殊的对象属性 , 所以javascript数组没有所谓的"越界"错误
- 查询任和对象中不存在的属性都不会导致错误, 只会返回undefined , 数组作为一种特殊的对象也是如此
示例:
let a=[true, false];
a[2];
a[-1];