真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

JavaScript遍歷對(duì)象的方法有幾種-創(chuàng)新互聯(lián)

幾天前一個(gè)小伙伴問我 Object.getOwnPropertyNames() 是干什么用的

創(chuàng)新互聯(lián)是一家專業(yè)提供南岔企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計(jì)、做網(wǎng)站H5響應(yīng)式網(wǎng)站、小程序制作等業(yè)務(wù)。10年已為南岔眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。

平時(shí)還真沒有使用到這個(gè)方法,一時(shí)不知如何回答

從方法名稱來分析,應(yīng)該是返回的是對(duì)象自身屬性名組成的數(shù)組

那和 Object.keys() 方法不就一樣了嗎

感覺事情并不這么簡(jiǎn)單,于是我仔細(xì)看了一下這幾種遍歷對(duì)象的方法的區(qū)別

for in

for in 循環(huán)是最基礎(chǔ)的遍歷對(duì)象的方式,它還會(huì)得到對(duì)象原型鏈上的屬性

// 創(chuàng)建一個(gè)對(duì)象并指定其原型,bar 為原型上的屬性
const obj = Object.create({
  bar: 'bar'
})

// foo 為對(duì)象自身的屬性
obj.foo = 'foo'

for (let key in obj) {
  console.log(obj[key]) // foo, bar
}

可以看到對(duì)象原型上的屬性也被循環(huán)出來了

在這種情況下可以使用對(duì)象的 hasOwnProperty() 方法過濾掉原型鏈上的屬性

for (let key in obj) {
  if (obj.hasOwnProperty(key)) {
    console.log(obj[key]) // foo
  }
}

這時(shí)候原型上的 bar 屬性就被過濾掉了

Object.keys

Object.keys() 是 ES5 新增的一個(gè)對(duì)象方法,該方法返回對(duì)象自身屬性名組成的數(shù)組,它會(huì)自動(dòng)過濾掉原型鏈上的屬性,然后可以通過數(shù)組的 forEach() 方法來遍歷

Object.keys(obj).forEach((key) => {
  console.log(obj[key]) // foo
})

另外還有 Object.values() 方法和 Object.entries() 方法,這兩方法的作用范圍和 Object.keys() 方法類似,因此不再說明

for in 循環(huán)和 Object.keys() 方法都不會(huì)返回對(duì)象的不可枚舉屬性

如果需要遍歷不可枚舉的屬性,就要用到前面提到的 Object.getOwnPropertyNames() 方法了

Object.getOwnPropertyNames

Object.getOwnPropertyNames() 也是 ES5 新增的一個(gè)對(duì)象方法,該方法返回對(duì)象自身屬性名組成的數(shù)組,包括不可枚舉的屬性,也可以通過數(shù)組的 forEach 方法來遍歷

// 創(chuàng)建一個(gè)對(duì)象并指定其原型,bar 為原型上的屬性
// baz 為對(duì)象自身的屬性并且不可枚舉
const obj = Object.create({
  bar: 'bar'
}, {
  baz: {
    value: 'baz',
    enumerable: false
  }
})

obj.foo = 'foo'

// 不包括不可枚舉的 baz 屬性
Object.keys(obj).forEach((key) => {
  console.log(obj[key]) // foo
})

// 包括不可枚舉的 baz 屬性
Object.getOwnPropertyNames(obj).forEach((key) => {
  console.log(obj[key]) // baz, foo
})

ES2015 新增了 Symbol 數(shù)據(jù)類型,該類型可以作為對(duì)象的鍵,針對(duì)該類型 ES2015 同樣新增了 Object.getOwnPropertySymbols() 方法

Object.getOwnPropertySymbols

Object.getOwnPropertySymbols() 方法返回對(duì)象自身的 Symbol 屬性組成的數(shù)組,不包括字符串屬性

Object.getOwnPropertySymbols(obj).forEach((key) => {
  console.log(obj[key])
})

什么都沒有,因?yàn)樵搶?duì)象還沒有 Symbol 屬性

// 給對(duì)象添加一個(gè)不可枚舉的 Symbol 屬性
Object.defineProperties(obj, {
  [Symbol('baz')]: {
    value: 'Symbol baz',
    enumerable: false
  }
})

// 給對(duì)象添加一個(gè)可枚舉的 Symbol 屬性
obj[Symbol('foo')] = 'Symbol foo'

Object.getOwnPropertySymbols(obj).forEach((key) => {
  console.log(obj[key]) // Symbol baz, Symbol foo
})

Reflect.ownKeys

Reflect.ownKeys() 方法是 ES2015 新增的靜態(tài)方法,該方法返回對(duì)象自身所有屬性名組成的數(shù)組,包括不可枚舉的屬性和 Symbol 屬性

Reflect.ownKeys(obj).forEach((key) => {
  console.log(obj[key]) // baz, foo, Symbol baz, Symbol foo
})

對(duì)比

方式基本屬性原型鏈不可枚舉Symbol
for in
Object.keys()
Object.getOwnPropertyNames()
Object.getOwnPropertySymbols()
Reflect.ownKeys()

結(jié)論

這其中只有 for in 循環(huán)會(huì)得到對(duì)象原型鏈上的屬性,其它方法都只適用于對(duì)象自身的屬性

ES 語言后續(xù)添加的新特性不會(huì)對(duì)以前的代碼產(chǎn)生副作用,比如在 ES2015 之前就存在的 for in 循環(huán),Object.keys() 和 Object.getOwnPropertyNames() 是肯定不會(huì)返回 Symbol 屬性的。

以上就是JS遍歷對(duì)象有幾種方法的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司其它相關(guān)文章!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


名稱欄目:JavaScript遍歷對(duì)象的方法有幾種-創(chuàng)新互聯(lián)
網(wǎng)頁路徑:http://weahome.cn/article/ccgcee.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部