日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

被Lodash的方法騙了好幾年,今天終于踩了大坑了!

來源: 責(zé)編: 時間:2024-01-24 17:27:16 222觀看
導(dǎo)讀背景我們項目中有一處業(yè)務(wù)代碼,需要根據(jù)不同的條件,對某個對象進(jìn)行屬性的刪除,大概代碼如下:接著需要判斷這個對象是否為空,為空的話就去執(zhí)行另一個很重要的邏輯,這里判斷對象為空,我們選擇了lodash的isEmpty方法:出問題了然

背景

我們項目中有一處業(yè)務(wù)代碼,需要根據(jù)不同的條件,對某個對象進(jìn)行屬性的刪除,大概代碼如下:RY028資訊網(wǎng)——每日最新資訊28at.com

RY028資訊網(wǎng)——每日最新資訊28at.com

接著需要判斷這個對象是否為空,為空的話就去執(zhí)行另一個很重要的邏輯,這里判斷對象為空,我們選擇了lodash的isEmpty方法:RY028資訊網(wǎng)——每日最新資訊28at.com

RY028資訊網(wǎng)——每日最新資訊28at.com

出問題了

然后就出事了,上線后發(fā)現(xiàn)有 BUG ,定位問題之后,發(fā)現(xiàn)就是明明對象不為空,然后isEmpty還是把這個對象判為空了,然后去執(zhí)行了接下來的邏輯,導(dǎo)致出現(xiàn) BUGRY028資訊網(wǎng)——每日最新資訊28at.com

然后我就去看了一下 isEmpty的源碼,總算是發(fā)現(xiàn)問題了!RY028資訊網(wǎng)——每日最新資訊28at.com

RY028資訊網(wǎng)——每日最新資訊28at.com

可以看到最后一個環(huán)節(jié),isEmpty 在判斷對象是否為空的時候,用了for in + hasOwnProperty去判斷某一個屬性是否存在對象中,只要有一個存在,那么這個對象就不為空!RY028資訊網(wǎng)——每日最新資訊28at.com

誒!那好像也沒啥問題啊?但是我突然想到,那這個for in能遍歷出 Symbol 類型的屬性嗎?于是我試了一下,發(fā)現(xiàn) for in 并不會遍歷 Symbol屬性。RY028資訊網(wǎng)——每日最新資訊28at.com

RY028資訊網(wǎng)——每日最新資訊28at.com

這也嚴(yán)重了問題出在lodash 的 isEmpty上,并且根本原因是 for in 并不會遍歷 Symbol屬性。RY028資訊網(wǎng)——每日最新資訊28at.com

解決問題

所以還是自己實現(xiàn)一個來解決這個問題吧!!!我們可以獲取到對象的屬性個數(shù),判斷屬性個數(shù)是否為0,為0那就是為空。RY028資訊網(wǎng)——每日最新資訊28at.com

那可以用Object.keys嗎?他的作用就是可以把對象的屬性放到一個數(shù)組中,我們試試之后,發(fā)現(xiàn)Object.keys并不會把Symbol屬性算進(jìn)去:RY028資訊網(wǎng)——每日最新資訊28at.com

RY028資訊網(wǎng)——每日最新資訊28at.com

我們換一下Reflect.ownKeys試試,發(fā)現(xiàn)就完全可以了!!!!RY028資訊網(wǎng)——每日最新資訊28at.com

RY028資訊網(wǎng)——每日最新資訊28at.com

所以最終自己實現(xiàn)了一個 isEmpty:RY028資訊網(wǎng)——每日最新資訊28at.com

RY028資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-67342-0.html被Lodash的方法騙了好幾年,今天終于踩了大坑了!

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: C++之光:std庫與Boost庫的優(yōu)美默契合作

下一篇: 在Django中自定義字段,你需要知道的所有知識點(diǎn)!

標(biāo)簽:
  • 熱門焦點(diǎn)
Top 主站蜘蛛池模板: 仙桃市| 乡城县| 获嘉县| 噶尔县| 宽甸| 岳西县| 象州县| 萨迦县| 新宾| 沙田区| 湖北省| 鸡东县| 泗水县| 贵州省| 周口市| 元阳县| 高要市| 南投市| 普定县| 界首市| 桑日县| 镇巴县| 湘西| 元江| 永宁县| 邢台县| 大城县| 福鼎市| 乡宁县| 武汉市| 五原县| 福清市| 皮山县| 金山区| 台北县| 翁源县| 白河县| 西乌珠穆沁旗| 广德县| 河间市| 四子王旗|