==
和 ===
之间的区别在于,前者仅检查值(1 == "1"
将返回true) 后一个是否检查值并另外检查类型(1 === "1"
将返回 false,因为 number
不是字符串)。
比较对象意味着比较对象引用(对象变量保存其引用的对象的内部地址,并且正在比较这些地址)。如果两个对象具有完全相同的键和值、函数等,但它们是单独的对象,则 ==
将返回 false,因此 ===
也将返回 false。
问题是:对于 JavaScript 对象,如果我使用 ==
或 ===
比较运算符,会有什么区别吗? ? PS如果我有任何错误,请纠正我并解释(我会接受它作为问题答案)
编辑:这与 javascript 原语无关,因此比较对象和原语是题外话。
最佳答案
用户定义对象的简单比较(我假设您询问的是它们而不是字符串和数字等基元),永远不会返回 true,因此没有必要使用它。您可以通过比较两个对象的原型(prototype)和构造函数来检查它们是否属于同一类型,但无论使用 == 还是 === 都无关紧要。唯一的区别是比较可能返回 true。但这当然并没有说明实例的属性,具有相同原型(prototype)和构造函数的两个实例可能具有不同的属性
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 方法直接比较它们,该方法返回每个对象的原型(prototype)。
关于JavaScript对象比较: equal vs strict equal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17571691/