最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

javascript遍歷對象的五種方式實(shí)例代碼

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

準(zhǔn)備

先來準(zhǔn)備一個(gè)測試對象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

這個(gè)是對象遍歷界的老兵了,通過這種方式可以遍歷對象自身及繼承的所有可枚舉屬性(不包括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

獲取一個(gè)對象的自身的所有(包括不可枚舉的和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合體的效果。

擴(kuò)展

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

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

引用自MDN: JavaScript 并沒有保護(hù) hasOwnProperty 屬性名,因此某個(gè)對象是有可能存在使用這個(gè)屬性名的屬性,所以直接使用原型鏈上的 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

檢測一個(gè)屬性在指定的對象中是否可枚舉,返回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)文章

  • 微信小程序如何獲取用戶頭像和昵稱

    微信小程序如何獲取用戶頭像和昵稱

    這篇文章主要介紹了微信小程序如何獲取用戶頭像和昵稱,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • JS中強(qiáng)制類型轉(zhuǎn)換的實(shí)現(xiàn)

    JS中強(qiáng)制類型轉(zhuǎn)換的實(shí)現(xiàn)

    JavaScript中有幾種強(qiáng)制類型轉(zhuǎn)換的方法,可以將一個(gè)數(shù)據(jù)類型轉(zhuǎn)換為另一個(gè)數(shù)據(jù)類型,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-05-05
  • js讀取注冊表的鍵值示例

    js讀取注冊表的鍵值示例

    讀取注冊表的鍵值的方法有很多,在本文將為大家詳細(xì)介紹下使用js如何實(shí)現(xiàn)注冊表的鍵值讀取,感興趣的朋友可以參考下
    2013-09-09
  • showModalDialog在谷歌瀏覽器下會返回Null的解決方法

    showModalDialog在谷歌瀏覽器下會返回Null的解決方法

    showModalDialog的返回值在IE、火狐下面都能夠獲取返回值,但是在谷歌瀏覽器下面會返回Null,下面有個(gè)不錯(cuò)的解決方法,感興趣的朋友可以參考下
    2013-11-11
  • JS使用new操作符創(chuàng)建對象的方法分析

    JS使用new操作符創(chuàng)建對象的方法分析

    這篇文章主要介紹了JS使用new操作符創(chuàng)建對象的方法,結(jié)合實(shí)例形式分析了javascript面向?qū)ο蟪绦蛟O(shè)計(jì)類的定義、new操作符對象的創(chuàng)建及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-05-05
  • js判斷undefined類型示例代碼

    js判斷undefined類型示例代碼

    這篇文章主要介紹了js判斷undefined類型的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2014-02-02
  • JS嚴(yán)格模式原理與用法實(shí)例分析

    JS嚴(yán)格模式原理與用法實(shí)例分析

    這篇文章主要介紹了JS嚴(yán)格模式原理與用法,結(jié)合實(shí)例形式分析了JS嚴(yán)格模式基本概念、原理、用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2020-04-04
  • Javascript中類式繼承和原型式繼承的實(shí)現(xiàn)方法和區(qū)別之處

    Javascript中類式繼承和原型式繼承的實(shí)現(xiàn)方法和區(qū)別之處

    其它的面向?qū)ο蟪绦蛟O(shè)計(jì)語言都是通過關(guān)鍵字來解決繼承的問題。但是javascript中并沒有定義這種實(shí)現(xiàn)的機(jī)制。接下來通過本文給大家介紹Javascript中類式繼承和原型式繼承的實(shí)現(xiàn)方法和區(qū)別,需要的朋友可以參考下
    2017-04-04
  • JavaSctit 利用FileReader和濾鏡上傳圖片預(yù)覽功能

    JavaSctit 利用FileReader和濾鏡上傳圖片預(yù)覽功能

    FileReader 對象允許Web應(yīng)用程序異步讀取存儲在用戶計(jì)算機(jī)上的文件內(nèi)容,使用 File或 Blob對象指定要讀取的文件或數(shù)據(jù)。下面通過本文給大家分享JavaSctit 利用FileReader和濾鏡上傳圖片預(yù)覽功能,需要的朋友參考下吧
    2017-09-09
  • javascript設(shè)計(jì)模式 – 享元模式原理與用法實(shí)例分析

    javascript設(shè)計(jì)模式 – 享元模式原理與用法實(shí)例分析

    這篇文章主要介紹了javascript設(shè)計(jì)模式 – 享元模式,結(jié)合實(shí)例形式分析了javascript享元模式相關(guān)概念、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-04-04

最新評論

高台县| 班戈县| 建昌县| 类乌齐县| 台北县| 临朐县| 边坝县| 得荣县| 本溪| 丰顺县| 聂拉木县| 高碑店市| 独山县| 肥西县| 兴宁市| 连南| 蛟河市| 科技| 神农架林区| 满洲里市| 霍邱县| 甘泉县| 大化| 建宁县| 龙岩市| 天峻县| 兴海县| 邢台县| 桐柏县| 富阳市| 曲松县| 元谋县| 阜平县| 广宁县| 永宁县| 西安市| 武安市| 莱芜市| 岳西县| 安陆市| 绥德县|