摘要:用循環(huán)和方法都可以獲取對(duì)象的屬性,那么它們有什么區(qū)別呢假設(shè)有一個(gè)對(duì)象定義不可枚舉屬性程序的輸出結(jié)果為兩種方式都獲取到了對(duì)象的所有可枚舉屬性,而對(duì)于不可枚舉屬性兩種方式都無(wú)法得到。
用for...in循環(huán)和Object.keys方法都可以獲取對(duì)象的屬性,那么它們有什么區(qū)別呢?假設(shè)有一個(gè)對(duì)象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));
程序的輸出結(jié)果為:
兩種方式都獲取到了對(duì)象的所有可枚舉屬性,而對(duì)于不可枚舉屬性兩種方式都無(wú)法得到。
下面頂一個(gè)對(duì)象b, 并且b作為對(duì)象a的原型對(duì)象:
var b = {bx: 1, by: 2}; Object.defineProperty(b, "bz", {value: 3}); Object.setPrototypeOf(a, b);
在此用上面的方式輸出a的key值,得到結(jié)果如下:
從輸出的結(jié)果中不難看出,for...in循環(huán)可以遍歷對(duì)象的所有可枚舉屬性,包括原型對(duì)象中的屬性,而通過(guò)Object.keys只能獲取到對(duì)象可枚舉的自有屬性,所以如果想通過(guò)for...in獲取對(duì)象的自有屬性,可通過(guò)hasOwnProperty方法對(duì)結(jié)果進(jìn)行過(guò)濾:
var keys = []; for (var key in a) { if (a.hasOwnProperty(key)) { keys.push(key); } }
也可以通過(guò)Object.getOwnPropertyNames獲取對(duì)象的自有屬性。
從上面的輸出結(jié)果中可知getOwnPropertyNames方法輸出的結(jié)果中還包含了對(duì)象的不可枚舉屬性,可以通過(guò)Object.propertyIsEnumerable來(lái)判斷屬性是否可枚舉從而對(duì)結(jié)果進(jìn)行過(guò)濾:
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/102607.html
摘要:中幾種遍歷對(duì)象的方法,包括它們?cè)谑褂脠?chǎng)景方面各有不同。注意它同一樣不能保證屬性按對(duì)象原來(lái)的順序輸出。其返回對(duì)象的所有自身屬性的屬性名組成的數(shù)組,但不會(huì)獲取原型鏈上的屬性。另外可以由或終止。在這些情況下,迭代器關(guān)閉。 js中幾種遍歷對(duì)象的方法,包括for..of、for..in、Object.keys、Object.getOwnProperty,它們?cè)谑褂脠?chǎng)景方面各有不同。 js對(duì)象的屬...
摘要:像和使用內(nèi)置構(gòu)造函數(shù)所創(chuàng)建的對(duì)象都會(huì)繼承自和的不可枚舉屬性,例如的方法或的方法。循環(huán)將遍歷對(duì)象本身的所有可枚舉屬性,以及對(duì)象從其構(gòu)造函數(shù)原型中繼承的屬性更接近原型鏈中對(duì)象的屬性覆蓋原型屬性。在中,非對(duì)象參數(shù)被強(qiáng)制轉(zhuǎn)換為對(duì)象。 for...in for...in 循環(huán)只遍歷可枚舉屬性。像 Array和 Object使用內(nèi)置構(gòu)造函數(shù)所創(chuàng)建的對(duì)象都會(huì)繼承自O(shè)bject.prototype和S...
摘要:一可以用作對(duì)象的復(fù)制可以用作對(duì)象的合并注意目標(biāo)對(duì)象自身也會(huì)改變。對(duì)象四返回一個(gè)數(shù)組,包括對(duì)象自身的不含繼承的所有可枚舉屬性不含屬性的鍵名。該方法返回被凍結(jié)的對(duì)象。方法判斷一個(gè)對(duì)象是否被凍結(jié)。 JavaScript對(duì)Object對(duì)象的一些常用操作總結(jié)。 一、Object.assign() 1.可以用作對(duì)象的復(fù)制 var obj = { a: 1 }; var copy = Object....
摘要:附如果你想獲取一個(gè)對(duì)象的所有屬性甚至包括不可枚舉的即可見(jiàn)下面一種方法方法返回一個(gè)由指定對(duì)象的所有自身屬性的屬性名包括不可枚舉屬性但不包括值作為名稱的屬性組成的數(shù)組。 JavaScript中遍歷獲取對(duì)象屬性和方法主要有三種: Object.keys()、Object.getOwnPropertyNames()、for...in... 一、Object.keys()、Object.get...
摘要:簡(jiǎn)單說(shuō)就是一個(gè)有一個(gè)函數(shù),這個(gè)函數(shù)執(zhí)行的返回值一定是一個(gè)對(duì)象,對(duì)象有兩個(gè)屬性標(biāo)記迭代是否結(jié)束,標(biāo)記這次迭代的結(jié)果值。 引言 遍歷對(duì)象是平常工作中很常見(jiàn)的一個(gè)操作,幾乎是日常操作,但是遍歷對(duì)象真的是一件很容易的事情么,顯然不是的。 常用的方式 for...in for (variable in object) {...} 這個(gè)是一個(gè)很常見(jiàn)的用法,相信每個(gè)人順手都可以寫出來(lái)。但是這里需要主...
閱讀 3067·2021-09-22 15:59
閱讀 1319·2021-08-30 09:46
閱讀 2281·2019-08-30 15:54
閱讀 2021·2019-08-26 12:15
閱讀 2547·2019-08-26 12:09
閱讀 1346·2019-08-26 11:57
閱讀 3344·2019-08-23 17:11
閱讀 1893·2019-08-23 15:59