这段代码怎麽运行的啊?
var obj; obj[{}]=true; obj[{x:1}]=true; obj;
var obj; obj[{}]=true; obj[{x:1}]=true; obj;
2017-05-28
var obj={};
obj[{}]=true;
console.log(obj);//输出Object {[object Object]: true}
var p;
for(p in keys){
console.log("======="+p);//输出=======0,应该证明里面有一个属性
console.log("======="+obj[p])//=======undefined 不知道为什么会这样
console.log("======="+obj[p.toString()])//=======undefined 不知道为什么会这样
}
obj[{x:1}]=false;
console.log(obj);//输出Object {[object Object]: false}
var p;
for(p in keys){
console.log("--------"+p);//输出------0 证明里面有一个属性
}
var o={};
for(p in o){
console.log("++++++++++++++++++++"+p);//无输出,里面没属性
}
console.log(o.toString());
//输出结果[object Object]与输出的Object {[object Object]: false}很相似
o={x:1};
console.log(o)//输出Object {x: 1}和Object {[object Object]: false}也很相似
console.log(o.toString())//同样也是输出[object Object] 注意这里用的是toString(),转成字符串
//把它们两个结合就变成Object {[object Object]: false}了
//然后推测一种可能
//obj[{}]=true; {}不是字符串,js自动调用o.toString()方法,将其转成字符串,因为key只能是字符串
//由上面知道o{} 的 toString()方法输出的是[object Object],所以obj中的[object Object]指向true
//obj[{x:1}]=false; {x:1}不是字符串,js自动调用o.toString()方法,将其转成字符串
//同样的由上面o{x:1} 的toString得到的字符串也是[object Object],
//所以obj中的[object Object](key)被改变为指向false(value);
//有一个问题就是o{x:1} o.toString()为什么输出的不是[String,Number],这个就不是很懂
//最后,我不知道这是对还是错,只是结合上面的输出结果推出来的
//所以如果错了,不干我事
举报