日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何解决for in 循环无法遍历symbol key的问题

發布時間:2023/12/31 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何解决for in 循环无法遍历symbol key的问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

歡迎關注博主博客: https://lvsige.top/

先說for in循環對象,hasOwnProperty()的作用

var obj = {name:"echolun",age:"24",sex:"male" }, objName=[], //用來裝對象屬性名 objVal=[]; //用來裝對象屬性值 for(var i in obj){objName.push(i);objVal.push(obj[i]); } console.log(objName,objVal);


需要注意的是,for in循環對象會訪問原型鏈上所有對象屬性,看下面。

var obj = {name:"echolun",age:"24",sex:"male" }, objName=[], //用來裝對象屬性名 objVal=[]; //用來裝對象屬性值 Object.prototype.game="lastgame"; for(var i in obj){objName.push(i);objVal.push(obj[i]); } console.log(objName,objVal); }

這里同樣是循環對象obj,但是需要注意的是,原型鏈上我們額外添加的對象game也被循環出來。

那么我們只想循環對應的對象該怎么做呢,這里引入hasOwnProperty()方法,hasOwnProperty()函數用于指示一個**對象自身(不包括原型鏈)**是否具有指定名稱的屬性。如果有,返回true,否則返回false。

說簡單點,它能幫你指向你當前循環的對象,而過濾掉原型鏈上其它對象,因為在工作中我們很難保證其他人是否會修改原型鏈,這樣做會更為保險,那么修改代碼:

var obj = {name:"echolun",age:"24",sex:"male" }, objName=[], //用來裝對象屬性名 objVal=[]; //用來裝對象屬性值 Object.prototype.game="lastgame"; for(var i in obj){if(obj.hasOwnProperty(i)) {objName.push(i);objVal.push(obj[i]);} } console.log(objName,objVal); }

看吧,這下就過濾掉game了。

1.hasOwnProperty()函數用于指示一個對象自身(不包括原型鏈)是否具有指定名稱的屬性。如果有,返回true,否則返回false。
2.說簡單點,它能幫你指向你當前循環的對象,而過濾掉原型鏈上其它對象,因為在工作中我們很難保證其他人是否會修改原型鏈,這樣做會更為保險。
3.因為 for in 循環總是遍歷整個原型鏈,所以當遍歷多繼承的對象時效率較低。
4.為了檢查某個對象是否擁有不在原型鏈上的自定義屬性,就有必要用到 hasOwnProperty 方法,任何一個對象都具有該方法,它繼承自 Object.prototype。
5.當檢測某個對象是否擁有某個屬性時,hasOwnProperty 是唯一可以完成這一任務的方法,在 for in 循環時,建議增加 hasOwnProperty 進行判斷,可以有效避免擴展本地原型而引起的錯誤。
6.我們無法完全檢測某個屬性是否是undefined,因為屬性有可能存在,但其值為undefined。
7.hasOwnProperty 是Javascript中唯一一個可以處理對象屬性而不遍歷原型鏈的方法。
hasOwnProperty()的主要作用就是在多重循環中過濾掉不符合條件的對象,減少遍歷次數,和其他編程語言中的continue和break類似。


屬性名的遍歷

Symbol 作為屬性名,遍歷對象的時候,該屬性不會出現在 for...in 、 for...of 循環中,也不 會被 Object.keys() 、 Object.getOwnPropertyNames() 、JSON.stringify() 返回。

但是,它也不是私有屬性,有一個 Object.getOwnPropertySymbols() 方法,可以獲取指定對象的所有 Symbol 屬性名。該方法返回一個數組,成員是當前對象的所有用作屬性名的 Symbol 值。

. const obj = {}; . let a = Symbol('a'); . let b = Symbol('b'); . . obj[a] = 'Hello'; . obj[b] = 'World'; . . const objectSymbols = Object.getOwnPropertySymbols(obj); . . objectSymbols . // [Symbol(a), Symbol(b)]

下面是另一個例子, Object.getOwnPropertySymbols() 方法與 for...in 循
環、 Object.getOwnPropertyNames 方法進行對比的例子。

. const obj = {}; . const foo = Symbol('foo'); . . obj[foo] = 'bar'; . . for (let i in obj) { . console.log(i); // 無輸出 . } . . Object.getOwnPropertyNames(obj) // [] . Object.getOwnPropertySymbols(obj) // [Symbol(foo)]

另一個新的 API, Reflect.ownKeys() 方法可以返回所有類型的鍵名,包括常規鍵名和 Symbol鍵名

. let obj = { . [Symbol('my_key')]: 1, . enum: 2, . nonEnum: 3 . }; . . Reflect.ownKeys(obj) . // ["enum", "nonEnum", Symbol(my_key)]

由于以 Symbol 值作為鍵名,不會被常規方法遍歷得到。我們可以利用這個特性,為對象定義一些非私有的、但又希望只用于內部的方法。

具體可以參考 https://www.cnblogs.com/zhenggc99/p/14718859.html

總結

以上是生活随笔為你收集整理的如何解决for in 循环无法遍历symbol key的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩伦理中文字幕 | 五月开心播播网 | 人成在线免费视频 | 日韩中文三级 | 亚洲国产成人精品女人久久 | www.黄在线观看 | 亚洲第一页综合 | 在线一区二区观看 | 久久精品99久久 | av免费在线网站 | 色呦网站 | 用我的手指扰乱你 | www.jizzcom| 97网站| 久久成人久久 | 国产精品一区二区免费看 | 99热国产| xxxxwwww国产 | 日本在线天堂 | 久久午夜精品 | 国产三级理论 | 韩日三级视频 | 午夜免费观看视频 | 国产精品剧情一区 | 国产黄色三级 | 日韩中文字幕一区二区三区四区 | 欧美人xxx | 黄色三级在线 | 99久久久久久久久 | 亚洲AV无码精品久久一区二区 | 日本中文字幕在线播放 | 啪啪五月天| 一本久久道 | 欧美激情视频网 | 中文字幕亚洲成人 | av撸撸在线| 91久| 午夜精品极品粉嫩国产尤物 | 国偷自产av一区二区三区麻豆 | 欧美用舌头去添高潮 | 黄色一级一片 | 国际av在线 | 熟妇五十路六十路息与子 | 亚洲黄v| 涩五月婷婷| 亲子伦视频一区二区三区 | 国产精品激情偷乱一区二区∴ | 国产精品国产三级国产专播精品人 | 亚洲福利视频在线 | 免费观看污视频 | 人妻激情文学 | 9·1·黄·色·视·频 | 人人澡人人插 | 男女裸体无遮挡做爰 | 在线观看免费高清在线观看 | 欧美激情一区二区三区在线 | 女优一区二区三区 | 亚洲一区二区黄 | 精品人妻一区二区三区四区在线 | 亚洲男女啪啪 | 天天射日日 | 国产精品区在线 | 男女免费视频网站 | 大地资源二中文在线影视免费观看 | 黄片毛片视频 | 亚洲一区二区三区四区 | 亚洲色图视频在线观看 | 最新中文字幕免费 | 精品国产乱码久久久久久蜜臀网站 | 蜜臀av色欲a片无码精品一区 | 欧美一区二区三区四区在线观看 | 主播av在线| 桃色在线视频 | 岳睡了我中文字幕日本 | 日日色综合 | 亚欧洲精品视频在线观看 | 日本天堂影院 | 亚洲精品www久久久久久 | 国产大片一区二区三区 | 日韩免费网站 | 天天干 夜夜操 | 一级片在线免费 | 精品美女久久久 | 美女上床网站 | 四虎永久在线 | 国产精选视频 | 91精品国产综合久久香蕉922 | 男人靠女人免费视频网站 | 国产高清免费在线 | 国产白浆在线观看 | 久久性生活 | 狠狠躁18三区二区一区传媒剧情 | 末路1997全集免费观看完整版 | 国产视频一区二区三区四区五区 | 在线免费观看av网站 | 水蜜桃影库| 91秦先生在线播放 | 国产真人无码作爱视频免费 | 成年网站在线播放 |