一尘不染

为什么相等检查不适用于数组

javascript

我开始于:

"1:2".split(':') == ["1","2"]; 
// false

然后尝试:

[1,2] == [1,2];
// false

最终:

[] == []; 
// false

从那以后我发现:

"1:2".split(':').toString() == [1,2].toString();
// true

因此,我已经解决了最初的问题(有点),但是为什么数组不能互相匹配?


阅读 203

收藏
2020-05-01

共1个答案

一尘不染

Javascript数组是对象,您不能简单地使用相等运算符==来了解那些对象的 内容
是否相同。如果两个物体实际上是完全一样的情况下(如平等运营商将只测试myObjVariable==myObjVariable,作品nullundefined太)。

如果您需要检查两个数组是否相等,我建议只遍历两个数组并验证所有元素具有相同的值(并且两个数组具有相同的长度)。

关于自定义对象的相等性,我将构建一个特定的equals函数,并将其添加到您的类的原型中。

考虑到最终您将两个数组都转换为String并测试了结果字符串的相等性,因此您可能有一天可以考虑使用类似但更通用的技术,在许多地方都可以找到它的描述:

JSON.stringify(OBJ1) === JSON.stringify(OBJ2)

好吧, 不要

如果这些对象实例的属性顺序始终相同,这可能会起作用,但是这会为难以追踪的极其讨厌的错误打开大门。始终倾向于采用更明确的方法,只需编写一个干净易读的函数即可测试是否需要检查所有必填字段。

2020-05-01