亚洲精品中文免费|亚洲日韩中文字幕制服|久久精品亚洲免费|一本之道久久免费

      
      

            <dl id="hur0q"><div id="hur0q"></div></dl>

                面試官:JavaScript對象屬性是有序的嗎?

                最近有人問我,JavaScript對象屬性是否一定是無序的、不可預(yù)測的?

                早期接觸過JavaScript的開發(fā)者可能會回答,Object.keys()或for…in會返回一個不可預(yù)知的對象屬性順序。

                但現(xiàn)在的情況仍然是這樣嗎?

                不是了,有些情況下是有序的。

                從ECMAScript 2020開始,Object.key、for…in、Object.getOwnPropertyNames和Reflect.ownKeys都遵循同一個規(guī)范順序。它們是:

                1. 自己的屬性是數(shù)組的索引,按數(shù)字索引升序排列

                const obj = { 100: 100, ‘2’: 2, 12: 12, ‘0’: 0}// 下面打印的結(jié)果順序都是 [‘0’, ‘2’, ’12’, ‘100’]console.log(Object.keys(obj))console.log(Object.getOwnPropertyNames(obj))console.log(Reflect.ownKeys(obj))for (const key in obj) { console.log(‘key’, key)}const obj = { a: ‘a’,};obj.b = ‘b’;setTimeout(() => { obj.c = ‘c’;});obj.d = ‘d’;// 下面打印的結(jié)果順序都是 `[ ‘a’, ‘b’, ‘d’ ]`console.log(Object.keys(obj));console.log(Object.getOwnPropertyNames(obj));console.log(Reflect.ownKeys(obj));for (const key in obj) { console.log(‘key: ‘, key);}

                上面的代碼添加了事件循環(huán)的知識點。因為 setTimeout 是一個異步的宏任務(wù),當(dāng)console.log輸出時,c屬性還沒有被添加到 obj 中。

                3. 自身的 Symbol 屬性,按創(chuàng)建時間順序遞增

                const obj = { [Symbol(‘a’)]: ‘a’, [Symbol.for(‘b’)]: ‘b’,};obj[Symbol(‘c’)] = ‘c’;console.log(Object.keys(obj)); // []console.log(Object.getOwnPropertyNames(obj)); // []console.log(Reflect.ownKeys(obj)); // [ Symbol(a), Symbol(b), Symbol(c) ]for (const key in obj) { console.log(‘key: ‘, key); // 沒有輸出}console.log(Object.getOwnPropertySymbols(obj)); // [ Symbol(a), Symbol(b), Symbol(c) ]

                Symbol 屬性和 String 屬性一樣,是按照屬性創(chuàng)建的時間順序升序排列的。但是Object.key, for…in, Object.getOwnPropertyNames方法不能獲得對象的 Symbol 屬性,Reflect.ownKeys和 Object.getOwnPropertySymbols 可以。

                總結(jié)

                當(dāng)一個對象的屬性鍵是上述類型的組合時,該對象的非負整數(shù)鍵(可枚舉和不可枚舉)首先按升序添加到數(shù)組中,然后按插入順序添加字符串鍵。最后,Symbol 鍵按插入順序加入。

                const obj = { 100: 100, 0: 0, a: ‘a’, [Symbol(‘a’)]: ‘a’,};obj[Symbol.for(‘b’)] = ‘b’;obj.b = ‘b’;console.log(Object.keys(obj)); // [ ‘0’, ‘100’, ‘a’, ‘b’ ]console.log(Object.getOwnPropertyNames(obj)); // [ ‘0’, ‘100’, ‘a’, ‘b’ ]console.log(Reflect.ownKeys(obj)); // [ ‘0’, ‘100’, ‘a’, ‘b’, Symbol(a), Symbol(b) ]for (const key in obj) { console.log(‘key: ‘, key); // ‘0’ ‘100’ ‘a’ ‘b’}console.log(Object.getOwnPropertySymbols(obj)); // [ Symbol(a), Symbol(b) ]

                但是,如果你強烈依賴插入順序,那么Map可以保證這一點。


                作者:islizeqiang 譯者:小智 來源:medium 原文:https://medium.com/@islizeqiang/are-javascript-object-properties-ordered-c30597754e5c

                鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場,版權(quán)歸原作者所有,如有侵權(quán)請聯(lián)系管理員(admin#wlmqw.com)刪除。
                用戶投稿
                上一篇 2022年7月15日 12:50
                下一篇 2022年7月15日 12:51

                相關(guān)推薦

                • TES官宣knight斷開連接!網(wǎng)友:左手就是下一個369

                  2022LPL冬季轉(zhuǎn)會期已經(jīng)正式到來,如果說此次轉(zhuǎn)會期熱度最高的一支隊伍,無疑就是在2022全球總決賽中拿到四強成績的JDG了。因為據(jù)目前網(wǎng)上爆料人的消息來看,JDG很有可能會通過…

                  2022年11月27日
                • 《寶可夢朱紫》獒教父屬性是什么?獒教父屬性一覽

                  寶可夢朱紫里獒教父是一只很強的寶可夢,很多玩家不清楚獒教父的屬性是什么樣的,下面就給大家?guī)韺毧蓧糁熳祥峤谈笇傩砸挥[,感興趣的小伙伴一起來看看吧,希望能幫助到大家。 獒教父屬性一覽…

                  2022年11月25日
                • 《寶可夢朱紫》太晶化強力寶可夢推薦 太晶化哪些寶可夢最強?

                  寶可夢朱紫游戲中寶可夢種類繁多,不過有的寶可夢比較強,有的稍弱一些,那么太晶化化哪些寶可夢最強呢,為了便于大家更好的體驗游戲,這里給大家?guī)砹藢毧蓧糁熳咸Щ瘡娏毧蓧敉扑],一起來…

                  2022年11月25日
                • 寶可夢朱紫寶主順序怎么選擇?寶可夢朱紫寶主挑戰(zhàn)順序攻略

                  寶可夢朱紫寶主順序如何選擇?寶主挑戰(zhàn)的順序有很多玩家都加入了討論,大家想要了解清楚正確的挑戰(zhàn)順序,接下來小編就給大家簡單的介紹一下寶主挑戰(zhàn)的順序,各位趕緊通過下面的攻略多了解一下詳…

                  2022年11月25日
                • 5+3疫情防控從哪天開始算(遼寧疫情防控最新政策)

                  最近有關(guān)國內(nèi)各地的疫情大家也都有在持續(xù)關(guān)注,目前國內(nèi)各地疫情隔離時間也根據(jù)二十條防控措施有了新的調(diào)整。那么,5+3疫情防控從哪天開始算?對于密接的5+3隔離時間計算大家還是比較關(guān)心…

                  2022年11月25日
                • 藍碼怎么變綠碼需要幾天(藍碼怎么變綠碼需要幾天)

                  大家都知道健康碼的顏色有紅碼、綠碼、黃碼,近日湖南健康碼上線“藍碼”,不少小伙伴發(fā)現(xiàn)自己健康碼變藍了,都想趕緊恢復(fù)綠碼,那么藍碼怎么變綠碼需要幾天?下面小編為大家?guī)硭{碼變綠碼需要…

                  2022年11月25日
                • 寶可夢朱紫四大天王屬性怎么樣 四大天王屬性數(shù)值介紹

                  寶可夢朱紫四大天王屬性如何?四大天王的屬性數(shù)值玩家們還是挺好奇的,想要了解四大天王屬性的可以看看下面小編的介紹,小編會把四大天王的屬性數(shù)值全都分享在下面,各位趕緊來小編這里多了解一…

                  2022年11月25日
                • 寶可夢朱紫皮卡丘多少級進化 皮卡丘進化條件攻略

                  寶可夢朱紫皮卡丘進化條件是什么?皮卡丘怎么進化?作為最受歡迎的電屬性寶可夢,大家都很想知道皮卡丘進化的方法,今天小編這就在下面的攻略中分享皮卡丘進化條件,各位可以趕緊來小編這里了解…

                  2022年11月25日
                • 拼多多百億補貼預(yù)售一般多久發(fā)貨(拼多多百億補貼預(yù)售)

                  拼多多里面有很多優(yōu)惠活動,其中百億補貼活動非?;鸨?,一些里面的東西價格比別的平臺便宜,質(zhì)量也有保障,還有預(yù)售的活動,那么拼多多百億補貼預(yù)售一般多久發(fā)貨?下面小編為大家?guī)砥炊喽喟賰|…

                  2022年11月25日
                • 北京疫情多久能解除封控(北京疫情還要多久結(jié)束)

                  最近一段時間北京疫情形勢備受關(guān)注,馬上就要到年底了,不少人想要去北京辦事,。都非常關(guān)注當(dāng)?shù)匾咔橄嚓P(guān)政策,那么 北京疫情多久能解除封控?北京疫情什么時候恢復(fù)正常生活?下面小編為大家?guī)А?/p>

                  2022年11月25日

                聯(lián)系我們

                聯(lián)系郵箱:admin#wlmqw.com
                工作時間:周一至周五,10:30-18:30,節(jié)假日休息