JavaScript对象比较: equal vs strict equal

标签 javascript object comparison

===== 之间的区别在于,前者仅检查值(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/

相关文章:

javascript - 如何重写此函数的比较和方法以提高效率?

javascript - 为什么新行上的 return 语句不返回任何值?

php - 使用 RecursiveDirectoryIterator 将目录和文件列表到数组中?

git - Mercurial 与 GIT 和 SVN 相比如何?

javascript - AngularJS:如何将 ng-click 绑定(bind)到使用嵌入或对象元素插入的 SVG 图像

javascript - 为什么另一个函数无法识别我的 JSON 响应?

java - 如何将数组列表的内容写入文本文件?

Javascript 对象字面量

c# - "is"- 引用或 gettype()

python - Python 的 SequenceMatcher 是如何工作的?