JavaScriptでは、二つのオブジェクトが同じかどうかをどう判断しますか?
3264 ワード
はじめに、二つのオブジェクトが同じかどうかをどう判断しますか?
二つのObjectタイプのオブジェクトは、同じ属性、同じ値を持っていても、==または==を使って比較すると、同じとは思えません.これは彼らが引用(メモリ内の位置)で比較しているので、基本タイプとは違って値で比較しているからです.この属性値の一つがオブジェクトである場合ですか? 属性値の一つがNaNである場合(JavaScriptでは、自分の唯一の価値に等しいですか? )属性の値がundefinedの場合、他のオブジェクトはこの属性がない(したがって、計算結果は不確定?) .
結語:
検査対象の「値が等しい」という強力な方法は、最適なテストライブラリに依存して、様々な境界状況をカバーしています.
最後にUnderscoreのソースアドレスを添付します.githb.com/hanzchi/un…
読んでいただいてありがとうございます.この文章があなたの役に立つことを願っています.以上に足りないところがあります.コメントエリアでよろしくお願いします.
転載先:https://juejin.im/post/5c948c41e51d451606692b30
二つのObjectタイプのオブジェクトは、同じ属性、同じ値を持っていても、==または==を使って比較すると、同じとは思えません.これは彼らが引用(メモリ内の位置)で比較しているので、基本タイプとは違って値で比較しているからです.
var obj1 = {
name: "xiaoming",
sex : "male"
}
var obj2 = {
name: "xiaoming",
sex : "male"
}
console.log(obj1 === obj2); // false
しかし、浅いコピーが同じメモリを指している場合、この時は2つのオブジェクトが同じです.var obj1 = {
name: "xiaoming",
sex : "male"
};
var obj2 = {
name: "xiaoming",
sex : "male"
};
var obj3 = obj1;
console.log(obj1 === obj3); // true
console.log(obj2 === obj3); // false
あなたが考えているように、オブジェクトの値が等しいことを確認します.私たちは基本的に遍歴するオブジェクトの属性ごとに、それらが同じかどうかを確認します.
/*
* @param x {Object} 1
* @param y {Object} 2
* @return {Boolean} true ,false
*/
var deepEqual = function (x, y) {
//
if (x === y) {
return true;
}
else if ((typeof x == "object" && x != null) && (typeof y == "object" && y != null)) {
if (Object.keys(x).length != Object.keys(y).length)
return false;
for (var prop in x) {
if (y.hasOwnProperty(prop))
{
if (! deepEqual(x[prop], y[prop]))
return false;
}
else
return false;
}
return true;
}
else
return false;
}
この簡単な実現は私たちの例に適用されるが、多くの場合、処理できない.たとえば:結語:
検査対象の「値が等しい」という強力な方法は、最適なテストライブラリに依存して、様々な境界状況をカバーしています.
最後にUnderscoreのソースアドレスを添付します.githb.com/hanzchi/un…
読んでいただいてありがとうございます.この文章があなたの役に立つことを願っています.以上に足りないところがあります.コメントエリアでよろしくお願いします.
転載先:https://juejin.im/post/5c948c41e51d451606692b30