对象相等的困惑
尽管具有相同的特征,两个看似相同的对象在 JavaScript 中仍然不相等。这种现象让很多人感到困惑,给出下面的代码片段:
var a = {}; var b = {}; console.log(a==b); //returns false console.log(a===b); //returns false
理解相等运算符
常规(==)和严格(===)相等运算符结果之间的差异在于类型转换。常规相等执行隐式类型转换,而严格相等则不执行。但是,在这种情况下,两个变量都是对象,因此类型转换无关紧要。
Object Identity
仅当比较相同的对象引用时,对象比较才计算为 true,无论使用什么等式运算符。换句话说,a == a、a == b(如果 b 是 a 的别名),但 a != c(如果 c 是不同的对象)。
含义
这种独特的行为对面向对象编程有影响。具有相同属性但不同引用的两个对象被认为是不相等的,即使它们代表相同的现实世界实体。
例如,在数据库中,两个对象代表具有相同姓名、地址和信息的同一个人。电话号码不会被视为相等,因为它们具有不同的对象引用。这可能会导致在执行对象比较时出现混乱的结果。
解决方案
如果需要比较两个对象的属性,请考虑使用第三方库或实现自定义比较函数,单独检查每个属性。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3