为什么Javascript数组接受字符串作为索引,而当它接受任何字符串值作为索引时,为什么不改变其长度呢?
我是Java的新手,遇到了这个问题。
var newArr = [];
newArr[0] = 0;
newArr[1] = 1;
newArr["2"] = 3;
newArr[3] = 3;
newArr[4] = 4;
newArr["a"] = "a";
console.log(newArr);
(5) [0, 1, 3, 3, 4, a: "a"]
length: 5
__proto__: Array(0)
答案 0 :(得分:4)
答案 1 :(得分:1)
为什么javscript数组接受字符串作为索引
如果所有(普通)属性键还不是字符串,则它们在赋值期间会被强制转换为字符串。
newArr["2"] = 3;
与
相同newArr[2] = 3;
数组是对象,对象接受任意键值对,所以
newArr["a"] = "a";
是合法的,这很奇怪。
数组的length
仅检查数字属性,请参见here:
此Array对象的length属性是一个数据属性,其值始终在数值上大于每个名称为数组索引的可删除属性的名称。
“数组索引”表示属性键是数字。
请注意,也可能有一个符号键,这是一种情况,其中属性键不是字符串:
const sym = Symbol();
const obj = {};
obj[sym] = 'foo';
console.log(typeof sym);
console.log(obj);