<del id="d4fwx"><form id="d4fwx"></form></del>
      <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

            <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
          • JavaScript遍歷對象的方法有幾種-創(chuàng)新互聯(lián)

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

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

            平時還真沒有使用到這個方法,一時不知如何回答

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

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

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

            for in

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

            // 創(chuàng)建一個對象并指定其原型,bar 為原型上的屬性
            const obj = Object.create({
              bar: 'bar'
            })
            
            // foo 為對象自身的屬性
            obj.foo = 'foo'
            
            for (let key in obj) {
              console.log(obj[key]) // foo, bar
            }

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

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

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

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

            Object.keys

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

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

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

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

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

            Object.getOwnPropertyNames

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

            // 創(chuàng)建一個對象并指定其原型,bar 為原型上的屬性
            // baz 為對象自身的屬性并且不可枚舉
            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ù)類型,該類型可以作為對象的鍵,針對該類型 ES2015 同樣新增了 Object.getOwnPropertySymbols() 方法

            Object.getOwnPropertySymbols

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

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

            什么都沒有,因為該對象還沒有 Symbol 屬性

            // 給對象添加一個不可枚舉的 Symbol 屬性
            Object.defineProperties(obj, {
              [Symbol('baz')]: {
                value: 'Symbol baz',
                enumerable: false
              }
            })
            
            // 給對象添加一個可枚舉的 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)方法,該方法返回對象自身所有屬性名組成的數(shù)組,包括不可枚舉的屬性和 Symbol 屬性

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

            對比

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

            結(jié)論

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

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

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

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

            本文名稱:JavaScript遍歷對象的方法有幾種-創(chuàng)新互聯(lián)
            轉(zhuǎn)載注明:http://www.jbt999.com/article44/ccgcee.html

            成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、網(wǎng)站內(nèi)鏈做網(wǎng)站、靜態(tài)網(wǎng)站商城網(wǎng)站、網(wǎng)站導航

            廣告

            聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

            商城網(wǎng)站建設

              <del id="d4fwx"><form id="d4fwx"></form></del>
              <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

                    <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
                  • 黄色电影地址 | 国产另类内射 | 大香蕉伊人m | 操操日日| 青娱视频亚洲免费 |