課程
/前端開發(fā)
/JavaScript
/JavaScript深入淺出
var?obj; obj[{}]=true; obj[{x:1}]=true; obj;
2017-05-28
源自:JavaScript深入淺出 4-1
正在回答
var obj={};
obj[{}]=true;
console.log(obj);//輸出Object {[object Object]: true}
var p;
for(p in keys){
? ? console.log("======="+p);//輸出=======0,應(yīng)該證明里面有一個(gè)屬性
? ? console.log("======="+obj[p])//=======undefined 不知道為什么會(huì)這樣
? ? console.log("======="+obj[p.toString()])//=======undefined 不知道為什么會(huì)這樣
}
obj[{x:1}]=false;
console.log(obj);//輸出Object {[object Object]: false}
? ? console.log("--------"+p);//輸出------0 證明里面有一個(gè)屬性
var o={};
for(p in o){
? ? console.log("++++++++++++++++++++"+p);//無輸出,里面沒屬性
console.log(o.toString());
//輸出結(jié)果[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(),轉(zhuǎn)成字符串
//把它們兩個(gè)結(jié)合就變成Object {[object Object]: false}了
//然后推測一種可能
//obj[{}]=true; ? {}不是字符串,js自動(dòng)調(diào)用o.toString()方法,將其轉(zhuǎn)成字符串,因?yàn)閗ey只能是字符串
//由上面知道o{} 的 toString()方法輸出的是[object Object],所以obj中的[object Object]指向true
//obj[{x:1}]=false; {x:1}不是字符串,js自動(dòng)調(diào)用o.toString()方法,將其轉(zhuǎn)成字符串
//同樣的由上面o{x:1} 的toString得到的字符串也是[object Object],
//所以obj中的[object Object](key)被改變?yōu)橹赶騠alse(value);
//有一個(gè)問題就是o{x:1} ? o.toString()為什么輸出的不是[String,Number],這個(gè)就不是很懂
//最后,我不知道這是對還是錯(cuò),只是結(jié)合上面的輸出結(jié)果推出來的
//所以如果錯(cuò)了,不干我事
應(yīng)該是,obj[{}]=true ? ?可能隱式的將{}變成字符串,也就是調(diào)用了 ?{}.toString()方法
但是還是說一遍,我不敢保證這是對的
寫這麼多,真是辛苦了。
這麼說的話,就是obj[{}]=true;調(diào)用了toString方法,然后輸出object,賦值為true,然后下一句就相當(dāng)于覆蓋了上一句?
最后要是有可以肯定的正確答案@我
最后可以肯定的正確答案@我
var?obj={}; obj[{}]=true; obj[{x:1}]=true; obj;
呵呵,應(yīng)該是這樣的,大神,幫忙解答疑惑啊。
好像報(bào)錯(cuò)了啊
舉報(bào)
由淺入深學(xué)習(xí)JS語言特性,且解析JS常見誤區(qū),從入門到掌握
24 回答以下這段代碼運(yùn)行結(jié)果不對
2 回答這段代碼是什么意思啊
7 回答這段代碼的執(zhí)行結(jié)果是什么?
4 回答請問這段代碼的邏輯怎么理解,不太懂
2 回答老師,這一段代碼具體是干嘛的啊,不太明白呢
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號(hào)-11 京公網(wǎng)安備11010802030151號(hào)
購課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號(hào)
2017-05-29
var obj={};
obj[{}]=true;
console.log(obj);//輸出Object {[object Object]: true}
var p;
for(p in keys){
? ? console.log("======="+p);//輸出=======0,應(yīng)該證明里面有一個(gè)屬性
? ? console.log("======="+obj[p])//=======undefined 不知道為什么會(huì)這樣
? ? console.log("======="+obj[p.toString()])//=======undefined 不知道為什么會(huì)這樣
}
obj[{x:1}]=false;
console.log(obj);//輸出Object {[object Object]: false}
var p;
for(p in keys){
? ? console.log("--------"+p);//輸出------0 證明里面有一個(gè)屬性
}
var o={};
for(p in o){
? ? console.log("++++++++++++++++++++"+p);//無輸出,里面沒屬性
}
console.log(o.toString());
//輸出結(jié)果[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(),轉(zhuǎn)成字符串
//把它們兩個(gè)結(jié)合就變成Object {[object Object]: false}了
//然后推測一種可能
//obj[{}]=true; ? {}不是字符串,js自動(dòng)調(diào)用o.toString()方法,將其轉(zhuǎn)成字符串,因?yàn)閗ey只能是字符串
//由上面知道o{} 的 toString()方法輸出的是[object Object],所以obj中的[object Object]指向true
//obj[{x:1}]=false; {x:1}不是字符串,js自動(dòng)調(diào)用o.toString()方法,將其轉(zhuǎn)成字符串
//同樣的由上面o{x:1} 的toString得到的字符串也是[object Object],
//所以obj中的[object Object](key)被改變?yōu)橹赶騠alse(value);
//有一個(gè)問題就是o{x:1} ? o.toString()為什么輸出的不是[String,Number],這個(gè)就不是很懂
//最后,我不知道這是對還是錯(cuò),只是結(jié)合上面的輸出結(jié)果推出來的
//所以如果錯(cuò)了,不干我事
2017-05-29
應(yīng)該是,obj[{}]=true ? ?可能隱式的將{}變成字符串,也就是調(diào)用了 ?{}.toString()方法
但是還是說一遍,我不敢保證這是對的
2017-05-29
寫這麼多,真是辛苦了。
2017-05-29
這麼說的話,就是obj[{}]=true;調(diào)用了toString方法,然后輸出object,賦值為true,然后下一句就相當(dāng)于覆蓋了上一句?
2017-05-29
最后要是有可以肯定的正確答案@我
2017-05-29
最后可以肯定的正確答案@我
2017-05-29
呵呵,應(yīng)該是這樣的,大神,幫忙解答疑惑啊。
2017-05-29
好像報(bào)錯(cuò)了啊