欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JS判斷對象屬性是否存在的五種方案分享

 更新時(shí)間:2022年01月24日 12:35:24   作者:半夏的故事  
編寫JS的過程中,我們經(jīng)常用到對象,也會用到對象中的屬性,下面這篇文章主要給大家介紹了關(guān)于JS判斷對象屬性是否存在的五種方案,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

背景

在這篇Accessible Object.prototype.hasOwnProperty() 提案中,提出了一個(gè)更簡單的方法來檢查對象時(shí)候具有特定的屬性-

Object.hasOwn(),主要目標(biāo)是用來替代Object.prototype.hasOwnProperty()。目前本提案已經(jīng)進(jìn)去第四階段,預(yù)計(jì)2022年納入標(biāo)準(zhǔn)。

隨著Object.hasOwn()的加入,目前我們已經(jīng)有了5個(gè)判斷對象屬性是否存在的方法!

檢查屬性是否存在

in

JavaScript的in操作符可以用來判斷一個(gè)屬性是否屬于一個(gè)對象,也可以用來變量一個(gè)對象的屬性

本文我們只討論in的檢查作用

in運(yùn)算符檢查對象是否具有給定名稱的屬性:

> 'name' in {name: '搞前端的半夏'}
true
> 'name' in {}
false

但是因?yàn)閕n會判斷繼承過來的屬性!

> 'toString' in {}
true

那是因?yàn)閧}繼承了方法Object.prototype.toString()

Reflect.has()

Reflect是在ES2015新增的一個(gè)內(nèi)置對象,提供了與Javascript對象交互的方法。

判斷一個(gè)對象是否存在某個(gè)屬性,和 in 運(yùn)算符] 的功能完全相同。

用法:Reflect.has(obj, propName)

Reflect.has({name:"搞前端的半夏"}, "name"); // true
Reflect.has({name:"搞前端的半夏"}, "age"); // false

Reflect.has({name:"搞前端的半夏"}, "toString"); //true

hasOwnProperty

hasOwnProperty這個(gè)方法可以用來檢測一個(gè)對象是否含有特定的自身屬性,即是用來判斷一個(gè)屬性是定義在對象本身而不是繼承自原型鏈的,

通過對象字面量或者構(gòu)造函數(shù)法創(chuàng)建的對象都從Object.prototype繼承了hasOwnProperty()。

構(gòu)造函數(shù)法

o = new Object();
o.name = '搞前端的半夏';
o.hasOwnProperty('name');             // 返回 true
o.hasOwnProperty('toString');         // 返回 false
o.hasOwnProperty('hasOwnProperty');   // 返回 false

對象字面量

o={name:"搞前端的半夏"}
o.hasOwnProperty('name');             // 返回 true
o.hasOwnProperty('toString');         // 返回 false
o.hasOwnProperty('hasOwnProperty');   // 返回 false

缺點(diǎn)

不支持create

但是下面這種情況:

o =  Object.create(null)
o.hasOwnProperty('name');             // 返回 true

會直接報(bào)錯(cuò):

Uncaught TypeError: o.hasOwnProperty is not a function
    at <anonymous>:1:3

覆蓋報(bào)錯(cuò)

如果一個(gè)對象有一個(gè)自己的名為 name 的屬性'hasOwnProperty',那么該屬性將被覆蓋Object.prototype.hasOwnProperty并且我們無法訪問它:

o={hasOwnProperty:"搞前端的半夏"}
o.hasOwnProperty('name');    

直接報(bào)錯(cuò)

VM123:3 Uncaught TypeError: o.hasOwnProperty is not a function
    at <anonymous>:3:3

Object.prototype.hasOwnProperty()

用法:Object.prototype.hasOwnProperty.call(obj, propName);,接受兩個(gè)參數(shù)。請注意我們這里用到了call。改變this的指向。

Object.prototype.hasOwnProperty除了支持hasOwnProperty的相同用法,同時(shí)還解決了hasOwnProperty的兩個(gè)缺點(diǎn)。

o={hasOwnProperty:"搞前端的半夏"}
Object.prototype.hasOwnProperty.call.hasOwnProperty(o,'name'); // 返回false

ES13(ES2022)Object.hasOwn()

Object.hasOwn(),目前來看就是替代Object.prototype.hasOwnProperty.call()。

如果用Object.prototype.hasOwnProperty.call() 來封裝的話,代碼如下:

function hasOwn(obj, propName) {
  return Object.prototype.hasOwnProperty.call(obj, propName);
}
Object.hasOwn({name: '搞前端的半夏'}, 'name')  // true
Object.hasOwn({}, 'name')               //false
Object.hasOwn({}, 'toString')             //false
Object.hasOwn(Object.create(null), 'name')     //false
Object.hasOwn({hasOwnProperty: 'yes'}, 'name')  //false
Object.hasOwn({hasOwn: 'yes'}, 'name')		 //false

總結(jié)

到此這篇關(guān)于JS判斷對象屬性是否存在的五種方案的文章就介紹到這了,更多相關(guān)JS判斷對象屬性存在內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • js 自制滾動條的小例子

    js 自制滾動條的小例子

    js 自制滾動條的小例子,需要的朋友可以參考一下
    2013-03-03
  • Bootstrap簡單表單顯示學(xué)習(xí)筆記

    Bootstrap簡單表單顯示學(xué)習(xí)筆記

    這篇文章主要為大家分享了Bootstrap簡單表單顯示學(xué)習(xí)筆記,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • js URL參數(shù)的拼接方法比較

    js URL參數(shù)的拼接方法比較

    請求的URL后面帶參數(shù)在項(xiàng)目中是很常見的,常用在的地方比如跳轉(zhuǎn)到新頁面或者請求CGI等
    2012-02-02
  • 你可能不知道的JavaScript位運(yùn)算符詳解

    你可能不知道的JavaScript位運(yùn)算符詳解

    位運(yùn)算符是在數(shù)字底層(即表示數(shù)字的32個(gè)數(shù)位)進(jìn)行操作的,下面這篇文章主要給大家介紹了一些你可能不知道的JavaScript位運(yùn)算符的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • javascript模擬枚舉的簡單實(shí)例

    javascript模擬枚舉的簡單實(shí)例

    本篇文章主要是對javascript模擬枚舉的簡單實(shí)例進(jìn)行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-03-03
  • HTML+CSS+JavaScript做女朋友版的刮刮樂(一看就會)

    HTML+CSS+JavaScript做女朋友版的刮刮樂(一看就會)

    這篇文章主要介紹了HTML+CSS+JavaScript做女朋友版的刮刮樂(一看就會)本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • JS模擬超市簡易收銀臺小程序代碼解析

    JS模擬超市簡易收銀臺小程序代碼解析

    本文通過實(shí)例代碼給大家介紹了JS模擬超市簡易收銀臺小程序代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下吧
    2017-08-08
  • 使用JavaScript進(jìn)行表單校驗(yàn)功能

    使用JavaScript進(jìn)行表單校驗(yàn)功能

    最近在學(xué)習(xí)JavaScript,因此想到使用js實(shí)現(xiàn)表單校驗(yàn)。下面通過本文給大家分享使用javascript實(shí)現(xiàn)表單校驗(yàn)功能的步驟,需要的的朋友參考下吧
    2017-08-08
  • Js實(shí)現(xiàn)粘貼上傳圖片的原理及示例

    Js實(shí)現(xiàn)粘貼上傳圖片的原理及示例

    這篇文章主要介紹了Js實(shí)現(xiàn)粘貼上傳圖片的原理及示例,幫助大家更好的理解和使用JavaScript,感興趣的朋友可以了解下
    2020-12-12
  • js判斷兩個(gè)字符串是否相等的兩種方法

    js判斷兩個(gè)字符串是否相等的兩種方法

    昨天用Ajax作驗(yàn)證,在前臺JS中判斷返回的字符串的值與給定的值是否相等,索性給大家總結(jié)下,這篇文章主要給大家介紹了關(guān)于js判斷兩個(gè)字符串是否相等的兩種方法,需要的朋友可以參考下
    2023-05-05

最新評論