问题描述:下面的代码中,c的值是多少?
var a = {};
var b = {};
var c = {};
c[a] = "123";
c[b] = "456";
console.log(c)
分析: 我们都知道,对象的key不能是对象,而这儿的a和b都是对象,那么这样写c有值吗?
那我们就来打印看看就知道了:
结果就是这个样子了。那我们看到c的结构,不免就知道了,c的key值是“[Object Object]”。那这个“[Object Object]”是怎么来的呢?
这样我们就或许知道了“[Object Object]”可能时怎么来的了。但是真的就是调用了toString()吗?啥时候调用的???
带着这个疑问,我们做一个操作:
结果表明,在a和b作为c的key时,调用了toString()方法,那么也就说得通了,对象不能作为另一对象的key值。这儿a和b自身调用了toString,然后才屈居于c的。
所以,最后的结果也就不难得出了,同一个对象,对同一个key作两次赋值,那么第二次自然就覆盖了第一次。