亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

用for...in 和Object.keys()枚舉對象屬性的差異

liaoyg8023 / 1941人閱讀

摘要:用循環(huán)和方法都可以獲取對象的屬性,那么它們有什么區(qū)別呢假設(shè)有一個對象定義不可枚舉屬性程序的輸出結(jié)果為兩種方式都獲取到了對象的所有可枚舉屬性,而對于不可枚舉屬性兩種方式都無法得到。

用for...in循環(huán)和Object.keys方法都可以獲取對象的屬性,那么它們有什么區(qū)別呢?假設(shè)有一個對象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é)果為:

兩種方式都獲取到了對象的所有可枚舉屬性,而對于不可枚舉屬性兩種方式都無法得到。
下面頂一個對象b, 并且b作為對象a的原型對象:

var b = {bx: 1, by: 2};
Object.defineProperty(b, "bz", {value: 3});
Object.setPrototypeOf(a, b);

在此用上面的方式輸出a的key值,得到結(jié)果如下:


從輸出的結(jié)果中不難看出,for...in循環(huán)可以遍歷對象的所有可枚舉屬性,包括原型對象中的屬性,而通過Object.keys只能獲取到對象可枚舉的自有屬性,所以如果想通過for...in獲取對象的自有屬性,可通過hasOwnProperty方法對結(jié)果進行過濾:

var keys = [];
for (var key in a) {
    if (a.hasOwnProperty(key)) {
        keys.push(key);
    }
}

也可以通過Object.getOwnPropertyNames獲取對象的自有屬性。


從上面的輸出結(jié)果中可知getOwnPropertyNames方法輸出的結(jié)果中還包含了對象的不可枚舉屬性,可以通過Object.propertyIsEnumerable來判斷屬性是否可枚舉從而對結(jié)果進行過濾:

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/102607.html

相關(guān)文章

  • Object.keys遍歷(forEach/map)對象數(shù)組,合并

    摘要:中幾種遍歷對象的方法,包括它們在使用場景方面各有不同。注意它同一樣不能保證屬性按對象原來的順序輸出。其返回對象的所有自身屬性的屬性名組成的數(shù)組,但不會獲取原型鏈上的屬性。另外可以由或終止。在這些情況下,迭代器關(guān)閉。 js中幾種遍歷對象的方法,包括for..of、for..in、Object.keys、Object.getOwnProperty,它們在使用場景方面各有不同。 js對象的屬...

    浠ラ箍 評論0 收藏0
  • javascript中枚舉 迭代對象方法

    摘要:像和使用內(nèi)置構(gòu)造函數(shù)所創(chuàng)建的對象都會繼承自和的不可枚舉屬性,例如的方法或的方法。循環(huán)將遍歷對象本身的所有可枚舉屬性,以及對象從其構(gòu)造函數(shù)原型中繼承的屬性更接近原型鏈中對象的屬性覆蓋原型屬性。在中,非對象參數(shù)被強制轉(zhuǎn)換為對象。 for...in for...in 循環(huán)只遍歷可枚舉屬性。像 Array和 Object使用內(nèi)置構(gòu)造函數(shù)所創(chuàng)建的對象都會繼承自O(shè)bject.prototype和S...

    MingjunYang 評論0 收藏0
  • JavaScript:對Object對象一些常操作總結(jié)

    摘要:一可以用作對象的復(fù)制可以用作對象的合并注意目標對象自身也會改變。對象四返回一個數(shù)組,包括對象自身的不含繼承的所有可枚舉屬性不含屬性的鍵名。該方法返回被凍結(jié)的對象。方法判斷一個對象是否被凍結(jié)。 JavaScript對Object對象的一些常用操作總結(jié)。 一、Object.assign() 1.可以用作對象的復(fù)制 var obj = { a: 1 }; var copy = Object....

    馬龍駒 評論0 收藏0
  • JavaScript中對象枚舉/遍歷(enumeration)

    摘要:附如果你想獲取一個對象的所有屬性甚至包括不可枚舉的即可見下面一種方法方法返回一個由指定對象的所有自身屬性的屬性名包括不可枚舉屬性但不包括值作為名稱的屬性組成的數(shù)組。 JavaScript中遍歷獲取對象屬性和方法主要有三種: Object.keys()、Object.getOwnPropertyNames()、for...in... 一、Object.keys()、Object.get...

    Amio 評論0 收藏0
  • JavaScript對象遍歷

    摘要:簡單說就是一個有一個函數(shù),這個函數(shù)執(zhí)行的返回值一定是一個對象,對象有兩個屬性標記迭代是否結(jié)束,標記這次迭代的結(jié)果值。 引言 遍歷對象是平常工作中很常見的一個操作,幾乎是日常操作,但是遍歷對象真的是一件很容易的事情么,顯然不是的。 常用的方式 for...in for (variable in object) {...} 這個是一個很常見的用法,相信每個人順手都可以寫出來。但是這里需要主...

    Seay 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<