偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

背景

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

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

出問題了

然后就出事了,上線后發(fā)現(xiàn)有 BUG ,定位問題之后,發(fā)現(xiàn)就是明明對象不為空,然后isEmpty還是把這個對象判為空了,然后去執(zhí)行了接下來的邏輯,導(dǎo)致出現(xiàn) BUG

然后我就去看了一下 isEmpty的源碼,總算是發(fā)現(xiàn)問題了!

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

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

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

解決問題

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

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

我們換一下Reflect.ownKeys試試,發(fā)現(xiàn)就完全可以了!?。?!

所以最終自己實現(xiàn)了一個 isEmpty:

責(zé)任編輯:趙寧寧 來源: 前端之神
相關(guān)推薦

2022-06-24 10:55:19

數(shù)據(jù)治理

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

項目管理戰(zhàn)略目標CIO

2024-07-24 13:02:31

LodashJS分組

2020-12-13 13:40:22

健康碼移動應(yīng)用

2021-01-06 16:37:17

5G網(wǎng)絡(luò)運營商

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

聽云應(yīng)用監(jiān)控

2025-04-15 19:52:04

2021-06-24 15:22:09

5G 視頻監(jiān)控物理安全

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

數(shù)據(jù)企業(yè)數(shù)據(jù)科學(xué)

2020-02-23 16:33:02

GitHub印度子公司
點贊
收藏

51CTO技術(shù)棧公眾號