javascript对象比较:等于vs严格相等

时间:2013-07-10 13:18:22

标签: javascript object comparison

=====之间的区别在于前者仅检查值(1 == "1"将返回true),后者是否检查值并另外检查类型({{1}因为1 === "1"不是字符串,所以会返回false。

比较对象意味着比较对象引用(对象变量将内部地址保存到它们引用的对象并且正在比较这些地址)。如果两个对象具有完全相同的键和值,函数等但它们是单独的对象,number将返回false,因此==也将返回false。

问题是:如果我使用=====比较运算符关于JavaScript对象,会有什么不同吗? PS如果我在任何地方都错了,请纠正我并解释(我会接受它作为问题的答案)

编辑:这不是关于javascript原语,因此比较对象和原语是偏离主题的。

1 个答案:

答案 0 :(得分:2)

用户定义对象的简单比较(我假设你要询问它们而不是关于字符串和数字等基元),永远不会返回true,所以没有必要使用它。您可以通过比较它们的原型和构造函数来检查两个对象是否属于同一类型,但是再次使用==或===时它是无关紧要的。唯一的区别是比较可能会返回true。但是这当然没有说明实例的属性,具有相同原型和构造函数的两个实例可能具有不同的属性

function cat1 () {
    this.name = "blacky";
    this.age =  9;
}

function cat2 () {
    this.name = "blacky";
    this.age  = 9;
}


var anton = new cat1()
var john  = new cat2()
var kevin = new cat1()

console.log(anton == kevin) // false
console.log(anton == john) // false
console.log(anton === john) // false
console.log(anton === kevin) // false
console.log(anton.__proto__ == kevin.__proto__) // true
console.log(anton.constructor == kevin.constructor) // true
console.log(anton.constructor == john.constructor) // false
console.log(anton.__proto__ == john.__proto__) // false

总而言之,您的问题的答案是:不,无论您使用==或===来比较对象都没有任何区别,因为比较它们总是返回false。如果要比较用户定义的(非原始)类型,则应使用返回每个对象原型的对象的 proto 方法直接比较它们。