gpt4 book ai didi

javascript 对象比较 : equal vs strict equal

转载 作者:行者123 更新时间:2023-11-29 22:12:09 26 4
gpt4 key购买 nike

==之间的区别和 ===是前者仅检查值(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。如果你想比较用户定义的(不是原始的)类型,你应该使用返回每个对象原型(prototype)的对象的 proto 方法直接比较它们。

关于javascript 对象比较 : equal vs strict equal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17571691/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com