我在书中,这个&对象原型,第3章:对象。
在数组部分,作者说如果你向一个数组添加一个属性,但是数组看起来像一个数字,它将最终作为数组索引的一部分:
myArray["3"] = "baz";
console.log(myArray.length);
console.log(myArray[3]);
看起来JavaScript隐含地将“3”字符串强制转换为数字3,然后它将“baz”放在数组的索引3中。
答案 0 :(得分:3)
实际上,反之亦然。 JavaScript对象中的所有键都是字符串,而数组是对象。这意味着myArray[3]
与myArray["3"]
相同,因为所有键(如果不是字符串)都被强制转换为字符串,因为所有JavaScript对象键都是字符串。每MDN:
对象属性名称可以是任何有效的JavaScript字符串,也可以是任何可以转换为字符串的字符串,包括空字符串。
和
请注意,方括号表示法中的所有键都将转换为String类型,因为JavaScript中的对象只能将String类型作为键类型。例如,在上面的代码中,当密钥
obj
添加到myObj
时,JavaScript将调用obj.toString()
方法,并将此结果字符串用作新密钥。
例如:
const obj = {
toString() {
return 'foobar';
}
};
const anotherObj = {};
anotherObj[obj] = 'baz';
//anotherObj.foobar is now 'baz'
由于obj
被隐式转换为字符串,因此调用obj.toString
,返回'foobar'
,用作键值。这同样适用于数组 - 使用括号表示法时。所有键都是字符串,使用括号表示法访问会将括号中的表达式强制转换为字符串。