摘要:用循環和方法都可以獲取對象的屬性,那么它們有什么區別呢假設有一個對象定義不可枚舉屬性程序的輸出結果為兩種方式都獲取到了對象的所有可枚舉屬性,而對于不可枚舉屬性兩種方式都無法得到。
用for...in循環和Object.keys方法都可以獲取對象的屬性,那么它們有什么區別呢?假設有一個對象a:
var a = {x: 1, y: 2}; Object.defineProperty(a, "z", {value: 3}); // 定義不可枚舉屬性z var keys = []; for (var key in a) { keys.push(key); } console.log(keys); console.log(Object.keys(a));
程序的輸出結果為:
兩種方式都獲取到了對象的所有可枚舉屬性,而對于不可枚舉屬性兩種方式都無法得到。
下面頂一個對象b, 并且b作為對象a的原型對象:
var b = {bx: 1, by: 2}; Object.defineProperty(b, "bz", {value: 3}); Object.setPrototypeOf(a, b);
在此用上面的方式輸出a的key值,得到結果如下:
從輸出的結果中不難看出,for...in循環可以遍歷對象的所有可枚舉屬性,包括原型對象中的屬性,而通過Object.keys只能獲取到對象可枚舉的自有屬性,所以如果想通過for...in獲取對象的自有屬性,可通過hasOwnProperty方法對結果進行過濾:
var keys = []; for (var key in a) { if (a.hasOwnProperty(key)) { keys.push(key); } }
也可以通過Object.getOwnPropertyNames獲取對象的自有屬性。
從上面的輸出結果中可知getOwnPropertyNames方法輸出的結果中還包含了對象的不可枚舉屬性,可以通過Object.propertyIsEnumerable來判斷屬性是否可枚舉從而對結果進行過濾:
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/102607.html
摘要:中幾種遍歷對象的方法,包括它們在使用場景方面各有不同。注意它同一樣不能保證屬性按對象原來的順序輸出。其返回對象的所有自身屬性的屬性名組成的數組,但不會獲取原型鏈上的屬性。另外可以由或終止。在這些情況下,迭代器關閉。 js中幾種遍歷對象的方法,包括for..of、for..in、Object.keys、Object.getOwnProperty,它們在使用場景方面各有不同。 js對象的屬...
摘要:像和使用內置構造函數所創建的對象都會繼承自和的不可枚舉屬性,例如的方法或的方法。循環將遍歷對象本身的所有可枚舉屬性,以及對象從其構造函數原型中繼承的屬性更接近原型鏈中對象的屬性覆蓋原型屬性。在中,非對象參數被強制轉換為對象。 for...in for...in 循環只遍歷可枚舉屬性。像 Array和 Object使用內置構造函數所創建的對象都會繼承自Object.prototype和S...
摘要:一可以用作對象的復制可以用作對象的合并注意目標對象自身也會改變。對象四返回一個數組,包括對象自身的不含繼承的所有可枚舉屬性不含屬性的鍵名。該方法返回被凍結的對象。方法判斷一個對象是否被凍結。 JavaScript對Object對象的一些常用操作總結。 一、Object.assign() 1.可以用作對象的復制 var obj = { a: 1 }; var copy = Object....
摘要:附如果你想獲取一個對象的所有屬性甚至包括不可枚舉的即可見下面一種方法方法返回一個由指定對象的所有自身屬性的屬性名包括不可枚舉屬性但不包括值作為名稱的屬性組成的數組。 JavaScript中遍歷獲取對象屬性和方法主要有三種: Object.keys()、Object.getOwnPropertyNames()、for...in... 一、Object.keys()、Object.get...
摘要:簡單說就是一個有一個函數,這個函數執行的返回值一定是一個對象,對象有兩個屬性標記迭代是否結束,標記這次迭代的結果值。 引言 遍歷對象是平常工作中很常見的一個操作,幾乎是日常操作,但是遍歷對象真的是一件很容易的事情么,顯然不是的。 常用的方式 for...in for (variable in object) {...} 這個是一個很常見的用法,相信每個人順手都可以寫出來。但是這里需要主...
閱讀 3065·2021-09-22 15:59
閱讀 1316·2021-08-30 09:46
閱讀 2280·2019-08-30 15:54
閱讀 2014·2019-08-26 12:15
閱讀 2540·2019-08-26 12:09
閱讀 1341·2019-08-26 11:57
閱讀 3340·2019-08-23 17:11
閱讀 1889·2019-08-23 15:59