成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

使用 Object.create(null) 代替大括號生成({})對象

cangck_X / 2936人閱讀

摘要:傳統(tǒng)對象寫法為這種寫法等價于,所以并不是真正的空對象,它還通過原型鏈繼承了的屬性方法。輸出當(dāng)對象和數(shù)值進(jìn)行運(yùn)算的時候會對對象進(jìn)行隱式轉(zhuǎn)換,就變成了所以計(jì)算結(jié)果的長度為。所以推薦大家使用代替大括號生成對象。

傳統(tǒng)對象寫法為 var obj = {} 這種寫法等價于 var obj = Object.create(Object.prototype) ,所以 {} 并不是真正的空對象,它還通過原型鏈繼承了 Object 的屬性方法。

這種方式不好地方是,{} 在某些時候會進(jìn)行隱式類型轉(zhuǎn)型,還有當(dāng)我們使用 for...in 時候會遍歷原形鏈上的屬性方法,如下面的代碼所示。

Object.prototype.test = "test";
var obj = {};
console.log((obj + 0).length); // 16
for (var i in obj) {
  console.log(i); // 輸出 test
}

當(dāng)對象和數(shù)值進(jìn)行運(yùn)算的時候會對對象進(jìn)行隱式轉(zhuǎn)換,{} + 1 就變成了 [object Object] + 0 所以計(jì)算結(jié)果的長度為 16。

for...in 進(jìn)行遍歷的時候也會遍歷原型鏈可枚舉的屬性,所以當(dāng)遍歷的時候還需要使用 hasOwnProperty 進(jìn)行過濾操作。

Object.create(null) 沒有這樣的問題,是一個沒有繼承 Object 原型的屬性和方法的純對象。

var obj = Object.create(null)
obj + obj  // Uncaught TypeError: Cannot convert object to primitive value
obj  + 1 // Uncaught TypeError: Cannot convert object to primitive value

性能方面,如下圖,在以前使用 Object.create(null) 會有性能問題(比 {} 慢了很多倍),而現(xiàn)在已經(jīng)不是問題了,而且更快了。

所以推薦大家使用 Object.create(null) 代替大括號生成({})對象。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/89982.html

相關(guān)文章

  • 創(chuàng)建對象的4種方式

    摘要:創(chuàng)建對象的種方式方式一通過對象字面量表示法又稱為直接量原始方式。例子在自定義構(gòu)造函數(shù)的內(nèi)部定義對象的方法函數(shù)的值賦給的屬性。 創(chuàng)建對象的4種方式 方式一:通過對象字面量表示法(又稱為直接量、原始方式)。object literals 方式二:通過new和構(gòu)造函數(shù)Object()、String()等。 方式三:用自定義構(gòu)造函數(shù)來初始化新對象。 方式四:通過Object.create()...

    seanlook 評論0 收藏0
  • ES6學(xué)習(xí)筆記2—各擴(kuò)展

    摘要:字符串的擴(kuò)展字符的表示法允許采用形式表示一個字符,其中表示字符的碼點(diǎn)。返回布爾值,表示參數(shù)字符串是否在源字符串的頭部。使用和這兩個常量,用來表示這個范圍的上下限。對于那些無法用個二進(jìn)制位精確表示的小數(shù),方法返回最接近這個小數(shù)的單精度浮點(diǎn)數(shù)。 字符串的擴(kuò)展 字符的 Unicode 表示法 JavaScript 允許采用uxxxx形式表示一個字符,其中xxxx表示字符的 Unicode 碼...

    Zoom 評論0 收藏0
  • ES6(3)- 各種類型的擴(kuò)展(數(shù)組、對象

    摘要:上面代碼中,分別是字符串布爾值和數(shù)值,結(jié)果只有字符串合入目標(biāo)對象以字符數(shù)組的形式,數(shù)值和布爾值都會被忽略。 1 數(shù)組的擴(kuò)展 http://es6.ruanyifeng.com/#do... 1.1 擴(kuò)展運(yùn)算符 2 對象的擴(kuò)展 http://es6.ruanyifeng.com/#do... 2.1 屬性的簡潔表示法 ES6 允許直接寫入變量和函數(shù),作為對象的屬性和方法。這樣的書寫更加簡...

    weapon 評論0 收藏0
  • JavaScript類的寫法

    摘要:在中,寫成類的本質(zhì)基本都是構(gòu)造函數(shù)原型。操作符左邊是待檢測類的對象,右邊是定義類的構(gòu)造函數(shù)。不宜用在這里,我們需要知道的幾種定義類的方法,除了上面的構(gòu)造函數(shù)外,還有方法用這個方法,類就是一個對象,而不是函數(shù)。 js類的基本含義 我們知道,在js中,是沒有類的概念的。類的所有實(shí)例對象都從同一個原型對象上繼承屬性,因此,原型對象是類的核心。 類是對象的抽象,而對象是類的具體實(shí)例。類是抽象的...

    OnlyLing 評論0 收藏0
  • ES5(下)

    摘要:命令命令的作用,就是執(zhí)行構(gòu)造函數(shù),返回一個實(shí)例對象。實(shí)例對象相當(dāng)于創(chuàng)建一個空的構(gòu)造函數(shù),將其屬性指向參數(shù)對象,從而實(shí)現(xiàn)讓該實(shí)例繼承的屬性。 這是ES5的入門篇教程的筆記,網(wǎng)址:JavaScript教程,以下內(nèi)容中黑體表示大標(biāo)題,還有一些重點(diǎn);斜體表示對于自身,還需要下功夫?qū)W習(xí)的內(nèi)容。這里面有一些自己的見解,所以若是發(fā)現(xiàn)問題,歡迎指出~ 實(shí)例對象與new命令面向?qū)ο缶幊淌悄壳爸髁鞯木幊谭?..

    includecmath 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<