第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

JavaScript:為什么“for in”循環(huán)從__proto__中選擇變量?

JavaScript:為什么“for in”循環(huán)從__proto__中選擇變量?

桃花長相依 2019-04-25 18:15:54
我trigger在Object的原型中添加了一個(gè)方法:Object.prototype.trigger = function() {     //  ...     return this;};然后有一個(gè)“for in”循環(huán):var obj = { 4: 15, 10 : 41, 11 : 46, 12 : 51, 20 : 74 }for( item in obj ) {     foo( obj[item] );}但是這個(gè)循環(huán)有6次迭代而不是5次。最后一次迭代是用鍵:item = "trigger"為什么循環(huán)遍歷__proto__對象的一部分?
查看完整描述

4 回答

?
揚(yáng)帆大魚

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超9個(gè)贊

for..in迭代原型鏈上任何位置的所有可枚舉屬性。如果你想使它trigger不可枚舉,所以它不會(huì)被迭代for..in,Object.defineProperty而是使用,這使得默認(rèn)情況下定義的屬性不可枚舉:


Object.defineProperty(Object.prototype, 'trigger', { value:  function() {

    

}});

var obj = { 4: 15, 10 : 41 }

for( item in obj ) {

    console.log(item);

}


查看完整回答
1 反對 回復(fù) 2019-05-17
?
一只萌萌小番薯

TA貢獻(xiàn)1795條經(jīng)驗(yàn) 獲得超7個(gè)贊

for...in 遍歷所有對象屬性而不區(qū)分對象本身或其任何祖先的屬性。


為了僅查看對象本身定義的屬性,您可以使用Object.prototype.hasOwnProperty:


const obj = { 4: 15, 10 : 41, 11 : 46, 12 : 51, 20 : 74 }

for( item in obj ) {

  if(obj.hasOwnProperty(item) {

    foo( obj[item] );

  }

}


// will ignore the trigger func and everything else defined on any prototype


查看完整回答
反對 回復(fù) 2019-05-17
?
撒科打諢

TA貢獻(xiàn)1934條經(jīng)驗(yàn) 獲得超2個(gè)贊

另一種方法是使用Object.keys:


Object.prototype.trigger = function() {

    return this;

};


var obj = { 4: 15, 10 : 41, 11 : 46, 12 : 51, 20 : 74 }


Object.keys(obj).forEach(function(item) {

    console.log( "Key: " + item + ", value: " + obj[item] );

});


查看完整回答
反對 回復(fù) 2019-05-17
?
阿晨1998

TA貢獻(xiàn)2037條經(jīng)驗(yàn) 獲得超6個(gè)贊

這是我不久前遇到的一個(gè)錯(cuò)誤。因?yàn)閿?shù)組也是對象,你可以迭代到原型,不要for..in用于數(shù)組。您的示例特定于導(dǎo)致此問題的對象。相反,使用標(biāo)準(zhǔn)for來迭代對象的項(xiàng)目。這樣,您可以為要實(shí)現(xiàn)的目標(biāo)實(shí)現(xiàn)更清晰,更安全的實(shí)現(xiàn),而不是使用主要用于實(shí)現(xiàn)反射的defineProperty或hasOwnProperty。

for (var i = 0; i < Object.values(obj).length; i++){
  console.log(i + ': ' + Object.values(obj)[i]);
  //foo( Object.values(obj)[i] );}


查看完整回答
反對 回復(fù) 2019-05-17
  • 4 回答
  • 0 關(guān)注
  • 751 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號