91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

javascript遍歷對象的方式有哪些

發布時間:2021-10-25 09:03:16 來源:億速云 閱讀:107 作者:iii 欄目:開發技術

本篇內容介紹了“javascript遍歷對象的方式有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

    準備

    先來準備一個測試對象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類型)組成的數組

    代碼清單3

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

    Object.getOwnPropertyNames

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

    代碼清單4

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

    Object.getOwnPropertySymbols

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

    代碼清單5

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

    Reflect.ownKeys

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

    代碼清單6

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

    總結

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

    api操作自身屬性不可枚舉屬性繼承屬性Symbol屬性
    for…in遍歷yesnoyesno
    Object.keys返回屬性數組yesnonono
    Object.getOwnPropertyNames返回非Symbol屬性數組yesyesnono
    Object.getOwnPropertySymbols返回Symbol屬性數組yesyesnoyes
    Reflect.ownKeys返回屬性數組yesyesnoyes

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

    擴展

    Object.values

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

    代碼清單7

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

    Object.entries

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

    代碼清單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)
    */

    “javascript遍歷對象的方式有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    乌审旗| 浦东新区| 获嘉县| 沅陵县| 宿松县| 泰来县| 布尔津县| 霍林郭勒市| 金堂县| 宾川县| 喀喇沁旗| 延津县| 石泉县| 札达县| 高阳县| 鲁山县| 蓝山县| 双桥区| 内丘县| 广安市| 教育| 迁安市| 大英县| 关岭| 浦北县| 柳林县| 潜江市| 贵德县| 元氏县| 西青区| 龙南县| 宣恩县| 县级市| 阜南县| 奈曼旗| 突泉县| 台东县| 澳门| 改则县| 剑河县| 登封市|