成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開發 前端
我們項目中有一處業務代碼,需要根據不同的條件,對某個對象進行屬性的刪除,我們選擇了lodash的isEmpty方法,然后就出事了。

背景

我們項目中有一處業務代碼,需要根據不同的條件,對某個對象進行屬性的刪除,大概代碼如下:

接著需要判斷這個對象是否為空,為空的話就去執行另一個很重要的邏輯,這里判斷對象為空,我們選擇了lodash的isEmpty方法:

出問題了

然后就出事了,上線后發現有 BUG ,定位問題之后,發現就是明明對象不為空,然后isEmpty還是把這個對象判為空了,然后去執行了接下來的邏輯,導致出現 BUG

然后我就去看了一下 isEmpty的源碼,總算是發現問題了!

可以看到最后一個環節,isEmpty 在判斷對象是否為空的時候,用了for in + hasOwnProperty去判斷某一個屬性是否存在對象中,只要有一個存在,那么這個對象就不為空!

誒!那好像也沒啥問題啊?但是我突然想到,那這個for in能遍歷出 Symbol 類型的屬性嗎?于是我試了一下,發現 for in 并不會遍歷 Symbol屬性。

這也嚴重了問題出在lodash 的 isEmpty上,并且根本原因是 for in 并不會遍歷 Symbol屬性。

解決問題

所以還是自己實現一個來解決這個問題吧!!!我們可以獲取到對象的屬性個數,判斷屬性個數是否為0,為0那就是為空。

那可以用Object.keys嗎?他的作用就是可以把對象的屬性放到一個數組中,我們試試之后,發現Object.keys并不會把Symbol屬性算進去:

我們換一下Reflect.ownKeys試試,發現就完全可以了!!!!

所以最終自己實現了一個 isEmpty:

責任編輯:趙寧寧 來源: 前端之神
相關推薦

2022-06-24 10:55:19

數據治理

2020-09-02 07:44:13

后端Long前端

2024-12-05 11:03:04

2024-06-13 10:37:30

2020-09-06 10:02:32

項目管理戰略目標CIO

2024-07-24 13:02:31

LodashJS分組

2020-12-13 13:40:22

健康碼移動應用

2021-01-06 16:37:17

5G網絡運營商

2021-07-01 21:48:09

用戶畫像流程

2021-12-13 20:09:33

GoElasticsearJava

2021-07-26 05:00:16

算法DfsBfs

2024-06-27 08:36:12

Lodash對象類型isObject?

2014-07-23 10:53:30

聽云應用監控

2025-04-15 19:52:04

2021-06-24 15:22:09

5G 視頻監控物理安全

2024-06-18 08:31:33

2023-10-31 07:40:15

EslintJSHint

2024-07-08 00:00:07

2017-11-03 11:06:36

數據企業數據科學

2020-02-23 16:33:02

GitHub印度子公司
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 香蕉av免费 | 欧美中文字幕一区 | 亚洲天天 | 日日久 | 毛片软件 | 中文在线视频 | 成人在线日韩 | 久久久久久国 | 成人在线视频免费观看 | 国产精品免费一区二区三区四区 | 九九热在线免费视频 | 日韩伦理电影免费在线观看 | 国产精品精品久久久 | 欧美不卡视频 | 欧美亚洲视频在线观看 | 理论片免费在线观看 | 69av网| 国产成人在线一区二区 | 日韩欧美网 | 成人午夜免费福利视频 | 久久久天堂 | 欧美一区在线视频 | 国产色婷婷精品综合在线手机播放 | 国产日韩一区二区 | 91视频亚洲 | 91精品久久久久久久久中文字幕 | 亚洲午夜电影 | 亚洲一区二区中文字幕在线观看 | 国产精品揄拍一区二区久久国内亚洲精 | 欧美片网站免费 | 精品国产一区二区三区成人影院 | 日韩精品久久 | 最新中文字幕久久 | 中文字幕第一页在线 | 激情91 | 日本久久网站 | 亚洲第1页 | 亚洲综合视频 | 91国内在线观看 | 欧美在线a| 99精品在线|