成人免费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?

2024-06-18 08:31:33

2014-07-23 10:53:30

聽云應用監控

2025-04-15 19:52:04

2021-06-24 15:22:09

5G 視頻監控物理安全

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 | 久久久在线视频 | 日韩精品视频在线观看一区二区三区 | 成人在线视频观看 | 日韩精品一区二区三区在线播放 | 国产亚洲人成a在线v网站 | 亚洲一区二区视频 | 亚洲欧美精 | 国产成人精品一区二 | 中文字幕一区在线 | 色站综合 | 亚洲影视在线 | 成人在线亚洲 | 九九热在线观看 | 一区二区三区亚洲精品国 | 黄色av网站在线免费观看 | 日韩在线欧美 | 久久久久一区 | 国产精品久久久久久久久久久免费看 | 国产探花在线精品一区二区 | 91在线视频播放 | 欧美日韩一区二区在线 | 人人看人人射 | 国产日韩欧美 | 亚洲网站在线 | 91色在线 | 国产精品日韩在线观看一区二区 | 日韩精品一区二区三区中文在线 |