var a={},
b={key:'b'},
c={key:'c'};
a[b]=123;
a[c]=456;
console.log(a[b]);//输出是456。
为什么输出的结果是456 不明白..求各位大神帮忙讲解一些..
var a={},
b={key:'b'},
c={key:'c'};
a[b]=123;
a[c]=456;
console.log(a[b]);//输出是456。
为什么输出的结果是456 不明白..求各位大神帮忙讲解一些..
你把对象 b
当做 a
的属性,就会先调用对象b
的toString()
方法。
var b={key:'b'};
b.toString(); // '[object Object]'
所以,
a[b] = 123;
// 即为
a['[object Object]'] = 123;
// 同理,下面一步赋值操作 c 也会先转换,然后再次更新属性 '[object Object]'对应的值
a['[object Object]'] = 456;
10 回答11.2k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
Javascript 中,当通过
[]
访问对象属性时, 方括号中的表达式将会被求值并被转换成一个字符串,调用它的toString
方法.所以:
所以
b
和c
均转换成相同的字符串[object Object]
. 所以再次赋值就会被覆盖.