您好,登錄后才能下訂單哦!
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); }
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。