欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

javascript遍歷對象的五種方式實例代碼

 更新時間:2021年10月24日 11:30:08   作者:照物華  
在我們?nèi)粘9ぷ鬟^程中,我們對于javaScript遍歷對象、數(shù)組的操作是十分的頻繁的,這篇文章主要給大家介紹了關(guān)于javascript遍歷對象的五種方式,需要的朋友可以參考下

準(zhǔn)備

先來準(zhǔn)備一個測試對象obj。

代碼清單1

var notEnum = Symbol("繼承不可枚舉symbol");
var proto = {
    [Symbol("繼承可枚舉symbol")]: "繼承可枚舉symbol",
    name: "繼承可枚舉屬性"
};
// 不可枚舉屬性
Object.defineProperty(proto, "age", {
    value: "繼承不可枚舉屬性"
});
// 不可枚舉symbol屬性
Object.defineProperty(proto, notEnum, {
    value: "繼承不可枚舉symbol"
});

var obj = {
    job1: "自有可枚舉屬性1",
    job2: "自有可枚舉屬性2",
    [Symbol("自有可枚舉symbol")]: "自有可枚舉symbol"
};
// 繼承
Object.setPrototypeOf(obj, proto);
// 不可枚舉屬性
Object.defineProperty(obj, "address", {
    value: "自有不可枚舉屬性"
});
// 不可枚舉symbol屬性
var ownNotEnum = Symbol("自有不可枚舉symbol");
Object.defineProperty(obj, ownNotEnum, {
    value: "自有不可枚舉symbol"
});

五種武器

for…in

這個是對象遍歷界的老兵了,通過這種方式可以遍歷對象自身及繼承的所有可枚舉屬性(不包括Symbol類型)。

代碼清單2

for(var attr in obj){
    console.log(attr,"==",obj[attr]);
}
/*
job1 == 自有可枚舉屬性1
job2 == 自有可枚舉屬性2
name == 繼承可枚舉屬性
*/

Object.keys

獲取對象自身所有可枚舉屬性(不包括Symbol類型)組成的數(shù)組

代碼清單3

Object.keys(obj).map((attr)=>{
    console.log(attr,"==",obj[attr]);
});
/*
job1 == 自有可枚舉屬性1
job2 == 自有可枚舉屬性2
*/

Object.getOwnPropertyNames

獲取對象自身所有類型為非Symbol的屬性名稱(包括不可枚舉)組成的數(shù)組

代碼清單4

Object.getOwnPropertyNames(obj).map((attr)=>{
    console.log(attr,"==",obj[attr]);
});
/*
job1 == 自有可枚舉屬性1
job2 == 自有可枚舉屬性2
address == 自有不可枚舉屬性
*/

Object.getOwnPropertySymbols

獲取對象自身所有類型為Symbol的屬性名稱(包括不可枚舉)組成的數(shù)組

代碼清單5

Object.getOwnPropertySymbols(obj).map((attr)=>{
    console.log(attr,"==",obj[attr]);
});
/*
Symbol(自有可枚舉symbol) == 自有可枚舉symbol
Symbol(自有不可枚舉symbol) == 自有不可枚舉symbol
*/

Reflect.ownKeys

獲取一個對象的自身的所有(包括不可枚舉的和Symbol類型)的屬性名稱組成的數(shù)組

代碼清單6

Reflect.ownKeys(obj).map((attr)=>{
    console.log(attr,"==",obj[attr]);
});
/*
job1 == 自有可枚舉屬性1
job2 == 自有可枚舉屬性2
address == 自有不可枚舉屬性
Symbol(自有可枚舉symbol) '==' '自有可枚舉symbol'
Symbol(自有不可枚舉symbol) '==' '自有不可枚舉symbol'
*/

總結(jié)

武器庫的說明書,根據(jù)需要選擇合適的武器吧。

api 操作 自身屬性 不可枚舉屬性 繼承屬性 Symbol屬性
for…in 遍歷 yes no yes no
Object.keys 返回屬性數(shù)組 yes no no no
Object.getOwnPropertyNames 返回非Symbol屬性數(shù)組 yes yes no no
Object.getOwnPropertySymbols 返回Symbol屬性數(shù)組 yes yes no yes
Reflect.ownKeys 返回屬性數(shù)組 yes yes no yes

五種武器里最牛的就是Reflect.ownKeys了,無論Symbol還是不可枚舉通吃, 簡直就是Object.getOwnPropertyNames和Object.getOwnPropertySymbols合體的效果。

擴展

Object.values

獲取對象自身所有可枚舉屬性(不包括Symbol類型)的值組成的數(shù)組

代碼清單7

Object.values(obj).map((val)=>{
    console.log(val);
});
/*
自有可枚舉屬性1
自有可枚舉屬性2
*/

Object.entries

獲取對象自身所有可枚舉屬性(不包括Symbol類型)的鍵值對數(shù)組

代碼清單7

Object.entries(obj).map((val)=>{
    console.log(val);
});
/*
[ 'job1', '自有可枚舉屬性1' ]
[ 'job2', '自有可枚舉屬性2' ]
*/

hasOwnProperty

檢測一個對象自身屬性中是否含有指定的屬性,返回boolean

引用自MDN: JavaScript 并沒有保護 hasOwnProperty 屬性名,因此某個對象是有可能存在使用這個屬性名的屬性,所以直接使用原型鏈上的 hasOwnProperty 方法

代碼清單8

for(var attr in obj){
    if(Object.prototype.hasOwnProperty.call(obj,attr)){
        console.log("自有屬性::",attr);
    }else{
        console.log("繼承屬性::",attr);
    }
}
/*
自有屬性:: job1
自有屬性:: job2
繼承屬性:: name
*/

propertyIsEnumerable

檢測一個屬性在指定的對象中是否可枚舉,返回boolean

代碼清單9

Reflect.ownKeys(obj).map((attr) => {
    if (Object.prototype.propertyIsEnumerable.call(obj, attr)) {
        console.log("可枚舉屬性::", attr);
    } else {
        console.log("不可枚舉屬性::", attr);
    }
});
/*
可枚舉屬性:: job1
可枚舉屬性:: job2
不可枚舉屬性:: address
可枚舉屬性:: Symbol(自有可枚舉symbol)
不可枚舉屬性:: Symbol(自有不可枚舉symbol)
*/

參考

MDN Object

總結(jié)

到此這篇關(guān)于javascript遍歷對象的五種方式的文章就介紹到這了,更多相關(guān)javascript遍歷對象內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Javascript生成帶參數(shù)的二維碼示例

    Javascript生成帶參數(shù)的二維碼示例

    這篇文章主要給大家介紹了Javascript生成帶有參樹二維碼的方法,實現(xiàn)的方法還是很簡單的,有需要的朋友們可以參考借鑒。下面來一起看看吧。
    2016-10-10
  • Javascript實時柱狀圖實現(xiàn)代碼

    Javascript實時柱狀圖實現(xiàn)代碼

    js實現(xiàn)的實時柱狀圖,非常有創(chuàng)意的想法。
    2008-10-10
  • layui頁面級彈出框的實現(xiàn)

    layui頁面級彈出框的實現(xiàn)

    本文主要介紹了layui頁面級彈出框的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 無間斷滾動marquee的詳細用法解析

    無間斷滾動marquee的詳細用法解析

    無間斷滾動marquee的詳細用法解析...
    2006-08-08
  • 微信小程序 搜索框組件代碼實例

    微信小程序 搜索框組件代碼實例

    這篇文章主要介紹了微信小程序 搜索框組件代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • 讓mocha支持ES6模塊的方法實現(xiàn)

    讓mocha支持ES6模塊的方法實現(xiàn)

    這篇文章主要介紹了讓mocha支持ES6模塊的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • js動態(tài)改變select選擇變更option的index值示例

    js動態(tài)改變select選擇變更option的index值示例

    今天刪除多個select值的時候出現(xiàn)了問題,搞了半天原來是索引引起的(即刪除的時候要從索引大的開始刪,然后再 刪除索引小的
    2014-07-07
  • 原生JS實現(xiàn)特效留言框

    原生JS實現(xiàn)特效留言框

    這篇文章主要為大家詳細介紹了原生JS實現(xiàn)特效留言框,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 面試常見的js算法題

    面試常見的js算法題

    本文主要介紹了面試常見的js算法題。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • IE下使用cloneNode注意事項分享

    IE下使用cloneNode注意事項分享

    在開發(fā)百度“地裂特效”時,發(fā)現(xiàn)了一些匪夷所思的 bug,第一反應(yīng)是特效本身的代碼與頁面上原有的腳本發(fā)生了沖突,經(jīng)過調(diào)試發(fā)現(xiàn),問題出現(xiàn)在 cloneNode 的應(yīng)用上
    2012-11-11

最新評論