相思资源网 Design By www.200059.com
hasOwnProperty
hasOwnProperty是javascript中用于检测对象是否包含某个属性的方法,返回一个布尔值。
var o = { a: 1}; console.log(o.hasOwnProperty('a')); // true console.log(o.hasOwnProperty('b')); // false
有一个用hasOwnProperty实现数组去重的方法:
var arr = ['a', 'b', 'c', 'b']; function uniqueArr(arr){ var unique = [], temp = {}; for(var i = 0; i < arr.length; i++){ if(temp[arr[i]] === undefined){ temp[arr[i]] = 1; unique.push(arr[i]); } } return unique; }
但是,如果数组中包含引用类型的指,则此方法失效。 那么该如何判断两个对象是否相等呢?
我们假设,如果两个对象具有相同的keys,并且每个key对应的value也都相等,则这两个对象相等。
现在我们已经明确了判断规则,那么该如何实现呢?
var o1 = {a:1, b:2}, o2 = {b:2, a:1}, o3 = {a:2, b:1}; function isEqual(o1, o2){ var o1_keys = Object.keys(o1); var o2_keys = Object.keys(o1); if(o1_keys.length !== o2_keys.length){ return false; } o1_keys = o1_keys.sort(); o2_keys = o2_keys.sort(); if(o1_keys.join('||') !== o2_keys.join('||')){ return false; } var r = true; for(var key of o1_keys){ if( !isPrimitive(o1[key] ) && !isPrimitive( o2[key])){ if(!isEqual(o1[key], o2[key])){ r = false; break; } } else if(o1[key] !== o2[key]){ r = false; break; } } return r; function isPrimitive(v){ var type = typeof v; return type === 'number' || type === 'string' || type === 'boolean' || v === undefined || v === null; } } console.log(isEqual(o1, o2)); console.log(isEqual(o1, o3)); console.log(isEqual({a:1, b:{c:1}}, {b:{c:2}, a:1})); console.log(isEqual({a:1, b:{c:1}}, {b:{c:1}, a:1})); console.log(isEqual({a:1, b:{c:1},c:2}, {b:{c:1}, a:1})); console.log(isEqual({a:1, b:{c:1}}, {b:{c:1}, a:{b:1}})); console.log(isEqual({a:1, b:function(){}}, {b:function(){}, a:1}));
上面的代码,我们基本上实现了判断两个对象是否相等,but!!!,还有一点,就是如果对象是函数,怎么判断是否相等?简单一点:Object.toString。
var f1 = function(){}; var f2 = function(){}; if(f1.toString() === f2.toString()){ console.log(true); }
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
相思资源网 Design By www.200059.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
相思资源网 Design By www.200059.com
暂无利用hasOwnProperty给数组去重的面试题分享的评论...
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。