摘要:這種情況如果在日常使用的時(shí)候是可以使用第一種的,如果需要大數(shù)據(jù)交互中僅僅是某一個(gè)判斷的話(huà),還是用第二種吧,畢竟涉及到循環(huán),性能差距還是很大的思考既然用到了,那么如何使用呢,兼容性如何呢,如何自己實(shí)現(xiàn)一個(gè)呢
如何判斷一個(gè)對(duì)象是一個(gè)空對(duì)象(不帶繼承的原型屬性,如果帶的話(huà)只能用for in)
空對(duì)象的呈現(xiàn)是var obj = {}
function IsEmptyObject(obj){ if(!obj || typeof obj != "object" || Array.isArray(obj)){ return false; } //第一種 //測(cè)試性能段 /* console.time("first"); if(JSON.stringify(obj) === "{}"){ console.timeEnd ("first"); return true }else{ console.timeEnd ("first"); return false; } */ return (JSON.stringify(obj) === "{}") //第二種 console.time("second"); for(var key in obj){ console.timeEnd ("second"); return false } console.timeEnd ("second"); return true; //第三種 return (Object.keys(obj).length === 0) }解決思路
第一種就是粗暴的直接轉(zhuǎn)字符串,然后強(qiáng)行比較
第二種就是利用for in的原理,然后一旦進(jìn)了循環(huán),說(shuō)明有key值,那就直接false啦,否則就是空對(duì)象
下面測(cè)試一下兩個(gè)方法的性能比較
第一種在a就是一個(gè)空對(duì)象的情況下,在Imac谷歌瀏覽器上平均耗時(shí)在0.012ms左右
第二種在a就是一個(gè)空對(duì)象的情況下,在Imac谷歌瀏覽器上平均耗時(shí)在0.007ms左右,性能差距為兩倍
第一種在a是一個(gè)普通對(duì)象的情況下,豆瓣的api對(duì)象,在Imac谷歌瀏覽器上平均耗時(shí)在0.08ms左右
第二種在a是一個(gè)普通對(duì)象的情況下,豆瓣的api對(duì)象,在Imac谷歌瀏覽器上,第一次稍慢,0.02ms,平均耗時(shí)在0.0075ms左右,性能差距隨著對(duì)象越大,差距也會(huì)越大
總結(jié)。這種情況如果在日常使用的時(shí)候是可以使用第一種的,如果需要大數(shù)據(jù)交互中僅僅是某一個(gè)判斷的話(huà),還是用第二種吧,畢竟涉及到循環(huán),性能差距還是很大的思考
既然用到了JSON.stringify,那么JSON.stringfy/parse如何使用呢,兼容性如何呢,如何自己實(shí)現(xiàn)一個(gè)呢
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/83371.html
摘要:注意類(lèi)繼承時(shí)的問(wèn)題繼承自方法中對(duì)象直接繼承和間接繼承的都會(huì)報(bào)解決的問(wèn)題通常是讓對(duì)象的手動(dòng)指向自己將自己的類(lèi)賦值給對(duì)象的屬性基類(lèi)不會(huì)報(bào)了原博參考,,,,判斷為 js基礎(chǔ)(二):構(gòu)造函數(shù)與原型 一、常見(jiàn)實(shí)例 判斷是否為對(duì)象 let obj = {} // 1.Object.prototype.toString if (Object.prototype.toString.call(obj...
摘要:我們一般用來(lái)深拷貝,其過(guò)程說(shuō)白了,就是利用將對(duì)象序列化字符串,再使用來(lái)反序列化還原對(duì)象。至于這行代碼為什么能實(shí)現(xiàn)深拷貝,以及它有什么局限性等等,不是本文要介紹的。小結(jié)論能不用和就不用,采用替代方案且性能更優(yōu)的。 JSON.parse(JSON.stringify(obj))我們一般用來(lái)深拷貝,其過(guò)程說(shuō)白了,就是利用 JSON.stringify 將js對(duì)象序列化(JSON字符串),再使...
摘要:中常常會(huì)看到這種代碼變量與的比較這種用法很有問(wèn)題用來(lái)判斷變量是否被賦予了一個(gè)合理的值比如不好的寫(xiě)法執(zhí)行一些邏輯這段代碼中方法顯然是希望是一個(gè)數(shù)組因?yàn)槲覀兛吹降膿碛泻瓦@段代碼的意圖非常明顯如果參數(shù)不是一個(gè)數(shù)組則停止接下來(lái)的操作這種寫(xiě)法的問(wèn)題在 js中, 常常會(huì)看到這種代碼: 變量與null的比較(這種用法很有問(wèn)題), 用來(lái)判斷變量是否被賦予了一個(gè)合理的值. 比如: const Contr...
摘要:本文,棧長(zhǎng)將帶你了解什么是空指針,還有如何有效的避免空指針。如何避免空指針下面說(shuō)幾個(gè)空指針的幾個(gè)最常見(jiàn)的案例及解決之道。字符串比較,常量放前面這個(gè)時(shí)候可能為造成空指針異常,應(yīng)該把常量放前面,就能避免空指針異常。 空指針是我們 Java 開(kāi)發(fā)人員經(jīng)常遇到的一個(gè)基本異常,這是一個(gè)極其普遍但似乎又無(wú)法根治的問(wèn)題。 本文,棧長(zhǎng)將帶你了解什么是空指針,還有如何有效的避免空指針。 什么是空指針? ...
摘要:用對(duì)象字面量創(chuàng)建的對(duì)象會(huì)報(bào)錯(cuò),使用構(gòu)造函數(shù)創(chuàng)建的對(duì)象屬于。發(fā)現(xiàn),構(gòu)造函數(shù)創(chuàng)建的,,,,。從原型鏈角度講,構(gòu)造函數(shù)就是新對(duì)象的的類(lèi)型。 一、前言 類(lèi)型判斷有時(shí)候真的頭疼,但是一旦熟練使用就會(huì)覺(jué)得不過(guò)如此。初級(jí)的,會(huì)判斷數(shù)字和字符串。中級(jí)的,會(huì)判斷數(shù)組和對(duì)象。進(jìn)階的,會(huì)判斷日期,正則,錯(cuò)誤類(lèi)型。高級(jí)的,會(huì)判斷plainObject,空對(duì)象,window對(duì)象等等。 基本類(lèi)型:String、N...
閱讀 3527·2021-11-17 17:00
閱讀 3933·2021-08-09 13:46
閱讀 2937·2019-08-30 15:54
閱讀 711·2019-08-30 13:54
閱讀 3014·2019-08-29 17:13
閱讀 3319·2019-08-29 14:00
閱讀 3049·2019-08-29 11:11
閱讀 1480·2019-08-26 10:15