关于使用数组字面量访问JavaScript对象属性的疑问求解
JavaScript对象属性键与数组访问的运行逻辑
先拆解对象字面量里的键处理逻辑:
- JavaScript里,对象的属性键(除Symbol类型外)最终都会被转换为字符串类型。
- 你写的这三个键:
"1": "a"、1: "b"、[1]: "c",本质都是同一个字符串键"1":- 直接写数字
1当键,JS会自动把它转成字符串"1"; - 方括号语法
[1]里的表达式1求值后是数字1,同样会被转成字符串"1";
- 直接写数字
- 因为对象的键是唯一的,后面的赋值会覆盖前面的,所以
"1"对应的最终值是最后设置的"c",[2]: "k"同理会被转成字符串"2",对应值"k"。
再看属性访问的逻辑:
obj[1]:这里的数字1会被转成字符串"1",所以取到的是键"1"对应的"c";obj[[1]]:用数组[1]作为访问键时,JS会先把数组转成字符串。数组的toString()方法会将元素用逗号拼接,[1].toString()的结果就是"1",最终还是访问键"1",所以结果也是"c"。
可以再试个例子验证:如果写obj[[1,2]],数组转字符串是"1,2",如果对象里有"1,2"这个键,就会返回对应的值,没有的话就返回undefined。
内容的提问来源于stack exchange,提问作者siddhant sankhe
相关产品推荐
相关产品推荐

