查找JS對(duì)象中是否包含某個(gè)變量的6種方法總結(jié)
在JavaScript中,檢查一個(gè)對(duì)象是否包含某個(gè)屬性(變量)可以通過(guò)幾種不同的方法實(shí)現(xiàn)。下面是一些常用的方法:
方法一:使用 in 運(yùn)算符
in
運(yùn)算符可以用來(lái)檢測(cè)一個(gè)對(duì)象是否具有指定的屬性名(無(wú)論該屬性是直接定義在對(duì)象上還是繼承來(lái)的)。
const obj = { a: 1, b: 2 }; console.log('a' in obj); // true console.log('c' in obj); // false
方法二:使用 hasOwnProperty() 方法
hasOwnProperty()
方法用來(lái)檢測(cè)一個(gè)對(duì)象是否直接具有指定的屬性名,不考慮繼承鏈上的屬性。
const obj = { a: 1, b: 2 }; console.log(obj.hasOwnProperty('a')); // true console.log(obj.hasOwnProperty('c')); // false
方法三:使用 Object.prototype.hasOwnProperty.call()
當(dāng)需要檢查一個(gè)繼承來(lái)的屬性是否存在時(shí),或者當(dāng) this
上下文不正確時(shí),可以使用 call()
或 apply()
方法來(lái)調(diào)用 hasOwnProperty
。
const obj = Object.create({ c: 3 }); obj.a = 1; obj.b = 2; console.log(Object.prototype.hasOwnProperty.call(obj, 'a')); // true console.log(Object.prototype.hasOwnProperty.call(obj, 'c')); // false
方法四:使用 Reflect.has()
Reflect.has()
方法類似于 in
運(yùn)算符,但它返回一個(gè)布爾值指示對(duì)象是否有給定的屬性鍵。
const obj = { a: 1, b: 2 }; console.log(Reflect.has(obj, 'a')); // true console.log(Reflect.has(obj, 'c')); // false
方法五:使用 Object.keys() 或 Object.getOwnPropertyNames()
如果你只需要檢查一個(gè)或幾個(gè)屬性,并且不關(guān)心性能,你可以使用 Object.keys()
或 Object.getOwnPropertyNames()
來(lái)獲取所有屬性名,然后檢查這些數(shù)組中是否包含你想要的屬性名。
const obj = { a: 1, b: 2 }; const keys = Object.keys(obj); console.log(keys.includes('a')); // true console.log(keys.includes('c')); // false const ownKeys = Object.getOwnPropertyNames(obj); console.log(ownKeys.includes('a')); // true console.log(ownKeys.includes('c')); // false
方法六:使用 Object.getOwnPropertyDescriptor()
如果需要檢查一個(gè)屬性是否存在并且獲取它的描述符,可以使用 Object.getOwnPropertyDescriptor()
。
const obj = { a: 1, b: 2 }; const desc = Object.getOwnPropertyDescriptor(obj, 'a'); console.log(desc !== undefined); // true const desc2 = Object.getOwnPropertyDescriptor(obj, 'c'); console.log(desc2 === undefined); // true
總結(jié)
- 使用
in
運(yùn)算符和Reflect.has()
可以檢測(cè)繼承來(lái)的屬性。 - 使用
hasOwnProperty()
和Object.getOwnPropertyDescriptor()
只能檢測(cè)對(duì)象自身的屬性。 - 使用
Object.keys()
和Object.getOwnPropertyNames()
可以獲得所有屬性的列表,然后進(jìn)行進(jìn)一步的檢查。
根據(jù)你的具體需求選擇合適的方法。
到此這篇關(guān)于查找JS對(duì)象中是否包含某個(gè)變量的6種方法總結(jié)的文章就介紹到這了,更多相關(guān)查找JS對(duì)象包含某變量?jī)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript知識(shí)點(diǎn)總結(jié)(十一)之js中的Object類詳解
這篇文章主要介紹了JavaScript知識(shí)點(diǎn)總結(jié)(十一)之js中的Object類詳解的相關(guān)資料,需要的朋友可以參考下2016-05-05淺談bootstrap源碼分析之tab(選項(xiàng)卡)
下面小編就為大家?guī)?lái)一篇淺談bootstrap源碼分析之tab(選項(xiàng)卡)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-06-06TypeScript實(shí)現(xiàn)單鏈表的示例代碼
鏈表是一種物理存儲(chǔ)單元上非連續(xù)、非順序的存儲(chǔ)結(jié)構(gòu),本文主要介紹了TypeScript實(shí)現(xiàn)單鏈表的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-08-08JavaScript實(shí)現(xiàn)簡(jiǎn)單圖片輪播效果
這篇文章主要介紹了JavaScript實(shí)現(xiàn)簡(jiǎn)單圖片輪播效果,點(diǎn)擊下標(biāo)切換到該圖片上,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08JS旋轉(zhuǎn)實(shí)現(xiàn)轉(zhuǎn)盤抽獎(jiǎng)效果
這篇文章主要為大家詳細(xì)介紹了JS旋轉(zhuǎn)實(shí)現(xiàn)轉(zhuǎn)盤抽獎(jiǎng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02JavaScript手寫源碼之omit函數(shù)的實(shí)現(xiàn)
最近突然有個(gè)新的想法,想去看看前端的小庫(kù)來(lái)提升自己的編碼能力。但是又不知道怎么去證明自己是否真的看懂了,那就實(shí)現(xiàn)一個(gè)omit函數(shù)吧2023-02-02js實(shí)現(xiàn)的二級(jí)橫向菜單條實(shí)例
這篇文章主要介紹了js實(shí)現(xiàn)的二級(jí)橫向菜單條,是非常美觀簡(jiǎn)潔的二級(jí)導(dǎo)航條效果,可實(shí)現(xiàn)針對(duì)鼠標(biāo)事件的動(dòng)態(tài)響應(yīng)及頁(yè)面樣式切換功能,簡(jiǎn)單實(shí)用,需要的朋友可以參考下2015-08-08Bootstrap Table服務(wù)器分頁(yè)與在線編輯應(yīng)用總結(jié)
這篇文章主要介紹了Bootstrap Table服務(wù)器分頁(yè)與在線編輯應(yīng)用總結(jié) 的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-08-08