javascript数组为什么接受字符串值索引

javascript数组为什么接受字符串值索引,javascript,node.js,Javascript,Node.js,为什么Javascript数组接受字符串作为索引,当它接受任何字符串值作为索引时,为什么不更改其长度 我是Javascript新手,遇到了这个问题 var newArr=[]; newArr[0]=0; newArr[1]=1; newArr[“2”]=3; newArr[3]=3; newArr[4]=4; newArr[“a”]=“a”; 控制台日志(newArr)因为 typeof Array() === 'object' 因此,可以像在任何普通对象上一样向数组添加新属性,这不会更改数

为什么Javascript数组接受字符串作为索引,当它接受任何字符串值作为索引时,为什么不更改其长度

我是Javascript新手,遇到了这个问题

var newArr=[];
newArr[0]=0;
newArr[1]=1;
newArr[“2”]=3;
newArr[3]=3;
newArr[4]=4;
newArr[“a”]=“a”;
控制台日志(newArr)因为

typeof Array() === 'object'
因此,可以像在任何普通对象上一样向数组添加新属性,这不会更改数组长度,因为这与实际向数组添加(推送)元素不同

为什么脚本数组接受字符串作为索引

在赋值过程中,如果所有(普通)属性键还不是字符串,它们将被强制为字符串

newArr["2"] = 3;

newArr[2] = 3;
数组是对象,对象接受任意键值对,所以

newArr["a"] = "a";
是合法的,只是做起来很奇怪

数组的
长度
仅检查数值属性,请参见:

此数组对象的length属性是一个数据属性,其值在数值上始终大于名称为数组索引的每个可删除属性的名称

通过“数组索引”,它意味着属性键是数字的

请注意,也可以使用符号键,在这种情况下,属性键不是字符串:

const sym=Symbol();
常量obj={};
obj[sym]=“foo”;
控制台日志(sym类型);
控制台日志(obj)