js/es6判斷對象是否為空,並判斷對象是否包含某個屬性
js判斷對象為空以及有好幾種方法了,但是個人覺得不是特別方便。
比如:
1、把對象通過 JSON.stringify 轉為字符串,再判斷字符串是否等於 " {} "
2、for in循環,判斷key是否存在
3、jq的方法
es6已經幫我們很好的解決了此類問題。
es6針對對象增加了3個新方法(數組也有):
(1)、Object.keys:返回一個數組,成員是參數對象自身的(不含繼承的)所有可遍歷屬性的鍵名
(2)、Object.values:返回一個數組,成員是參數對象自身的(不含繼承的)所有可遍歷屬性的鍵值
(3)、Object.entries:返回一個數組,成員是參數對象自身的(不含繼承的)所有可遍歷屬性的鍵值對
由此,我們可以通過其中任意一個方法,得到返回的數組,判斷數組長度是否大於0,來判斷對象是否為空。
舉個栗子:
-
const obj = {
-
foo: 'bar',
-
baz: 42
-
}
-
console.log(Object.keys(obj));
-
// ["foo", "baz"]
-
-
console.log(Object.values(obj));
-
// ["bar", 42]
-
-
console.log(Object.entries(obj));
-
// [["foo", "bar"], ["baz", 42]]
-
-
// 打印返回值的長度
-
console.log(Object.keys(obj).length); // 2
-
-
const obj2 = {};
-
console.log(Object.keys(obj2)); // []
-
// 打印空對象的長度
-
console.log(Object.keys(obj2).length); // 0
這樣我們就可以很簡單直觀的判斷出對象是否為空,並且可以通過這三個方法,拿到想要的數據(鍵名、鍵值、鍵值對)
那么既然得到了返回值數組,我們也可以很簡單的判斷對象中是否包含某個我們已知的屬性名
-
console.log(keys.indexOf('baz')); // 1
-
-
console.log(keys.indexOf('ad')); // -1
indexOf可以判斷數組是否包含某個值,返回該值所對應的下標,對於不存在的值,返回 -1
這樣我們就能判斷對象是否包含某個屬性名了
當然了,es6還提供了其他幾種判斷對象是否包含屬性名的方法,如下:
1、in:屬性名 in 對象(判斷屬性名是否在對象中存在,返回一個布爾值)
console.log('baz' in obj); // true
2、hasOwnProperty:對象.hasOwnProperty(屬性名)(判斷對象中是否含有某個屬性名,返回一個布爾值)
console.log(obj.hasOwnProperty('baz')); // true
好了,以上就是es6中判斷對象是否為空,並且判斷對象是否包含某個屬性的方法