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

當前位置:首頁 > 科技  > 軟件

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

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

背景

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

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

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

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

出問題了

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

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

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

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

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

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

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

解決問題

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

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

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

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

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

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

nNF28資訊網(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中自定義字段,你需要知道的所有知識點!

標簽:
  • 熱門焦點
  • 7月安卓手機好評榜:三星S23Ultra好評率第一

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數(shù)據(jù)來源安兔兔評測,收集時間2023年7月1日至7月31日,僅限國內(nèi)市場。第一名:三星Galaxy S23 Ultra好評率:95.71%在即將迎來新
  • 7月安卓手機性價比榜:努比亞+紅魔兩款新機入榜

    7月登場的新機有努比亞Z50S Pro和紅魔8S Pro,除了三星之外目前唯二的兩款搭載超頻版驍龍8Gen2處理器的產(chǎn)品,而且努比亞和紅魔也一貫有著不錯的性價比,所以在本次的性價比榜單
  • 2023 年的 Node.js 生態(tài)系統(tǒng)

    隨著技術(shù)的不斷演進和創(chuàng)新,Node.js 在 2023 年達到了一個新的高度。Node.js 擁有一個龐大的生態(tài)系統(tǒng),可以幫助開發(fā)人員更快地實現(xiàn)復雜的應(yīng)用。本文就來看看 Node.js 最新的生
  • 一文看懂為蘋果Vision Pro開發(fā)應(yīng)用程序

    譯者 | 布加迪審校 | 重樓蘋果的Vision Pro是一款混合現(xiàn)實(MR)頭戴設(shè)備。Vision Pro結(jié)合了虛擬現(xiàn)實(VR)和增強現(xiàn)實(AR)的沉浸感。其高分辨率顯示屏、先進的傳感器和強大的處理能力
  • K8S | Service服務(wù)發(fā)現(xiàn)

    一、背景在微服務(wù)架構(gòu)中,這里以開發(fā)環(huán)境「Dev」為基礎(chǔ)來描述,在K8S集群中通常會開放:路由網(wǎng)關(guān)、注冊中心、配置中心等相關(guān)服務(wù),可以被集群外部訪問;圖片對于測試「Tes」環(huán)境或者
  • SpringBoot中使用Cache提升接口性能詳解

    環(huán)境:springboot2.3.12.RELEASE + JSR107 + Ehcache + JPASpring 框架從 3.1 開始,對 Spring 應(yīng)用程序提供了透明式添加緩存的支持。和事務(wù)支持一樣,抽象緩存允許一致地使用各
  • 讓我們一起聊聊文件的操作

    文件【1】文件是什么?文件是保存數(shù)據(jù)的地方,是數(shù)據(jù)源的一種,比如大家經(jīng)常使用的word文檔、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存數(shù)據(jù),它既可以保
  • 消費結(jié)構(gòu)調(diào)整丨巨頭低價博弈,拼多多還卷得動嗎?

    來源:征探財經(jīng)作者:陳香羽隨著流量紅利的退潮,電商的存量博弈越來越明顯。曾經(jīng)主攻中高端與品質(zhì)的淘寶天貓、京東重拾“低價”口號。而過去與他們錯位競爭的拼多多,靠
  • 華為Mate60系列模具曝光:采用碩大圓形后置相機模組+拼接配色方案

    據(jù)此前多方爆料,今年華為將開始恢復一年雙旗艦戰(zhàn)略,除上半年推出的P60系列外,往年下半年的Mate系列也將迎來更新,有望在9-10月份帶來全新的華為Mate60
Top 主站蜘蛛池模板: 巩义市| 内丘县| 图木舒克市| 河北省| 赤城县| 泽库县| 朝阳市| 镇沅| 青河县| 神农架林区| 六枝特区| 兴山县| 车险| 贵溪市| 米脂县| 上饶县| 通海县| 呼玛县| 仪征市| 沛县| 阳新县| 都昌县| 民权县| 当雄县| 临漳县| 密山市| 武乡县| 通辽市| 南开区| 宜宾市| 平远县| 龙泉市| 乌兰县| 汝城县| 交口县| 麟游县| 青岛市| 元阳县| 福州市| 礼泉县| 高陵县|