怎样推断一个对象是一个空对象(不带继续的原型属性,假如带的话只能用for in)
空对象的呈现是var obj = {}
function IsEmptyObject(obj){
if(!obj || typeof obj != 'object' || Array.isArray(obj)){
return false;
}
//第一种
//测试机能段
/*
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)
}
处理思绪
第一种就是粗犷的直接转字符串,然后强行比较
第二种就是应用for in
的道理,然后一旦进了轮回,申明有key
值,那就直接false
啦,不然就是空对象
机能比较
下面测试一下两个要领的机能比较
- 第一种在a就是一个空对象的状况下,在Imac谷歌浏览器上均匀耗时在
0.012ms
摆布 - 第二种在a就是一个空对象的状况下,在Imac谷歌浏览器上均匀耗时在
0.007ms
摆布,机能差异为两倍 - 第一种在a是一个一般对象的状况下,豆瓣的api对象,在Imac谷歌浏览器上均匀耗时在
0.08ms
摆布 - 第二种在a是一个一般对象的状况下,豆瓣的api对象,在Imac谷歌浏览器上,第一次稍慢,
0.02ms
,均匀耗时在0.0075ms
摆布,机能差异跟着对象越大,差异也会越大
总结。
这类状况假如在一样平常运用的时刻是能够运用第一种的,假如须要大数据交互中仅仅是某一个推断的话,照样用第二种吧,毕竟涉及到轮回,机能差异照样很大的
思索
既然用到了JSON.stringify,那末JSON.stringfy/parse怎样运用呢,兼容性怎样呢,怎样本身完成一个呢