JavaScript判斷對象是否包含某個屬性的幾種方法


1、最簡單的方法,就是使用“!==”進行判斷,這種方法在工作中很常見,可以看出該方法可以判斷繼承來的屬性。

let obj = { x: 1 };
obj.x !== undefined;   // true 有x屬性
obj.y !== undefined;   // false 無y屬性
obj.toString !== undefined;   // true 從Object繼承toString屬性

2、使用 in 運算符,in 的語法是: attr in obj , 同樣,該表達式也返回一個布爾值。

let obj = { x: 1 };
'x' in obj;             // true
'y' in obj;             // false
'toString' in obj;      // true

in運算符語法很簡單,效果跟undefined是相同的,與undefined不同的是,in可以區分存在但值為undefined的屬性。話不多說,看代碼:

let obj = { x: undefined };
obj.x !== undefined;            // false
'x' in obj;                     // true

可以看出如果屬性的值為undefined的時候,使用 !== 的方法就不奏效了,所以在工作中需要注意一下這一塊。

3、對象的 hasOwnProperty() 方法也可以檢測指定屬性名是否在對象內,同樣返回是布爾值, 當檢測屬性為自有屬性(非繼承)的時候返回true。

let obj = { x: 1, abc: 2 };
let a = 'a';
let b = 'bc';
obj.hasOwnProperty('x');               // true 包含
obj.hasOwnProperty('y');               // false 不包含
obj.hasOwnProperty('toString');        // false 繼承屬性
obj.hasOwnProperty(a + b);             // true 判斷的是屬性abc

in 運算符和 hasOwnProperty() 的區別就在於 in 運算符可以判斷來自繼承的屬性,而hasOwnProperty() 不能。針對這一點在工作中加以運用還是很有幫助的。

4、propertyIsEnumerable() 是hasOwnProperty() 的增強版,這個方法的用法與hasOwnProperty()相同,但當檢測屬性是自有屬性(非繼承)且這個屬性是可枚舉的,才會返回true。

那么什么是可枚舉屬性?通俗的講就是可以通過for...in遍歷出來的屬性就是可枚舉屬性。通常由JS代碼創建出來的屬性都是可枚舉的。看一下代碼也許更方便理解:

let obj = Object.create({x: 1});                   // 通過create()創建一個繼承了X屬性的對象obj
obj.propertyIsEnumerable('x');                     // false x是繼承屬性
obj.y = 1;                                         // 給obj添加一個自有可枚舉屬性y
obj.propertyIsEnumerable('y');                     // true
Object.prototype.propertyIsEnumerable('toString'); // false 不可枚舉

5、Object.keys(),它會返回一個對象自身的可枚舉屬性的名字,類型為一個數組。 

let obj = { x: 1 };
Object.defineProperty(obj, 'test', {
	value: 'testVal',
	enumerable: false,
	writable: true,
	configurable: true
});
let arr = Object.keys(obj);
arr.includes('x');  // true
arr.includes('test');  //false

我們使用了ES5提供的Object.defineProperty()方法為person對象增加了一個不可枚舉的名為 test 的屬性,它的值為 ‘testVal’。Object.keys()在獲得了一個對象的可枚舉屬性之后,接下來的操作就變成了在數組中查找符合條件的元素。在上述代碼中我們用了數組內置的includes()方法,對於舊版瀏覽器你可能需要改用 indexOf()等方法。

 

以上五種方法,都可以判斷出對象是否包含某個屬性,工作中可以根據不同情況采用不同的方法。

 

參考鏈接:https://blog.csdn.net/z327171559/article/details/82152603

       https://baijiahao.baidu.com/s?id=1669987908375979930&wfr=spider&for=pc


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM