2

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

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

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

编辑:这与javascript原语无关,因此比较对象和原语是题外话。

4

1 回答 1

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

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

于 2013-07-10T13:53:33.310 回答