摘要:是中用于检测对象是否包含某个属性的方法,返回一个布尔值。有一个用实现数组去重的方法但是,如果数组中包含引用类型的指,则此方法失效。
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); }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/99022.html
摘要:后面的方法中的源数组,都是指的这个。它类似于数组,但是成员的值都是唯一的,没有重复的值。这貌似是目前看来最完美的解决方案了。所以稍加改变源数组,给两个空对象中加入键值对。 showImg(https://segmentfault.com/img/bVbpfjp?w=750&h=422); 前言 这是前端面试题系列的第 8 篇,你可能错过了前面的篇章,可以在这里找到: JavaScri...
摘要:封装手写的方笔记使用检测文件前端掘金副标题可以做什么以及使用中会遇到的坑。目的是帮助人们用纯中文指南实现复选框中多选功能前端掘金作者缉熙简介是推出的一个天挑战。 深入理解 JavaScript Errors 和 Stack Traces - 前端 - 掘金译者注:本文作者是著名 JavaScript BDD 测试框架 Chai.js 源码贡献者之一,Chai.js 中会遇到很多异常处理...
摘要:封装手写的方笔记使用检测文件前端掘金副标题可以做什么以及使用中会遇到的坑。目的是帮助人们用纯中文指南实现复选框中多选功能前端掘金作者缉熙简介是推出的一个天挑战。 深入理解 JavaScript Errors 和 Stack Traces - 前端 - 掘金译者注:本文作者是著名 JavaScript BDD 测试框架 Chai.js 源码贡献者之一,Chai.js 中会遇到很多异常处理...
阅读 2626·2021-11-23 09:51
阅读 859·2021-09-24 10:37
阅读 3611·2021-09-02 15:15
阅读 1961·2019-08-30 13:03
阅读 1881·2019-08-29 15:41
阅读 2624·2019-08-29 14:12
阅读 1423·2019-08-29 11:19
阅读 3300·2019-08-26 13:39