今天偶然看到个js面试题目,问控制台输出信息是什么。
var a = {};
var b = {name:"ZS"};
var c = {};
c[a] = "demo1";
c[b] = "demo2";
console.log(c[a]);
console.log(c);
首先,a为空对象,b为name属性值为ZS的对象,c也为空对象;
之后,依次给c添加属性分别为a、b,值为demo1、demo2;
打印输出结果依次为:demo2(确实是demo2不是demo1);
Object {[object Object]: "demo2"}。
疑惑的地方主要在于:第一行结果的demo2。
代码里的c[a]、c[b]隐式的将对象a,b使用了toString()方法进行了转换,然后再对属性赋值。
测试代码如下:
var a = {};
var b = {name:"ZS"};
var c = {
"[object Object]":"demo"
};
console.log(c[a]);//demo
c[a] = "demo1"; //这里接