猿问

为什么不使用等式检查数组

我开始时:


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

// false

然后尝试:


[1,2] == [1,2];

// false

最终:


[] == []; 

// false

我发现了:


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

// true

所以我已经解决了我的初始问题(种类),但为什么数组不能相互匹配?


catspeake
浏览 315回答 3
3回答

犯罪嫌疑人X

Javascript数组是对象,您不能简单地使用相等运算符==来理解这些对象的内容是否相同。等于运算符将仅测试两个对象实际上是否完全相同(例如myObjVariable==myObjVariable,适用于null且undefined也是如此)。如果你需要检查两个数组是否相等,我建议只遍历两个数组并验证所有元素是否具有相同的值(并且两个数组的长度相同)。关于自定义对象的相等性,我会构建一个特定的equals函数,然后将它添加到类的原型中。考虑到最终你将两个数组转换为String测试结果字符串的相等性,有一天你可以考虑使用一个类似但更通用的技术,你会发现它在很多地方描述:JSON.stringify(OBJ1) === JSON.stringify(OBJ2) 好吧,不要。虽然如果属性的顺序对于那些对象实例总是相同的,这可能会起作用,但是这样就可以打开那些难以追踪的非常讨厌的错误。总是喜欢更明确的方法,只需编写一个干净且可读的函数来测试相等性检查所有必需的字段。

精慕HU

该==用于在JavaScript对象操作者仅检查是否该对象是相同的实际对象引用,而不是如果它们包含相同内容的两个单独的对象。没有内置运算符来检查它们是否包含相同的内容。您必须自己编写一个函数来进行这种比较。只要数组元素只包含原始值(而不是其他对象),您的字符串转换就是比较两个数组的一种方法。如果数组元素可以包含其他元素,那么您必须确保这些对象本身也转换为代表性字符串。并且,转换为字符串不会在包含的数组元素与包含的数组元素之间分辨"4",4因为两者都转换为"4"字符串表示形式。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答