为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

catspeake 2019-09-03 16:07:39
我开始时:"1:2".split(':') == ["1","2"]; // false然后尝试:[1,2] == [1,2];// false最终:[] == []; // false我发现了:"1:2".split(':').toString() == [1,2].toString();// true所以我已经解决了我的初始问题(种类),但为什么数组不能相互匹配?
查看完整描述

3 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞


Javascript数组是对象,您不能简单地使用相等运算符==来理解这些对象的内容是否相同。等于运算符将仅测试两个对象实际上是否完全相同(例如myObjVariable==myObjVariable,适用于null且undefined也是如此)。


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


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


考虑到最终你将两个数组转换为String测试结果字符串的相等性,有一天你可以考虑使用一个类似但更通用的技术,你会发现它在很多地方描述:


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

好吧,不要。


虽然如果属性的顺序对于那些对象实例总是相同的,这可能会起作用,但是这样就可以打开那些难以追踪的非常讨厌的错误。总是喜欢更明确的方法,只需编写一个干净且可读的函数来测试相等性检查所有必需的字段。


查看完整回答
反对 回复 2019-09-03
?
精慕HU

TA贡献1845条经验 获得超8个赞

==用于在JavaScript对象操作者仅检查是否该对象是相同的实际对象引用,而不是如果它们包含相同内容的两个单独的对象。没有内置运算符来检查它们是否包含相同的内容。您必须自己编写一个函数来进行这种比较。

只要数组元素只包含原始值(而不是其他对象),您的字符串转换就是比较两个数组的一种方法。如果数组元素可以包含其他元素,那么您必须确保这些对象本身也转换为代表性字符串。

并且,转换为字符串不会在包含的数组元素与包含的数组元素之间分辨"4"4因为两者都转换为"4"字符串表示形式。


查看完整回答
反对 回复 2019-09-03
  • 3 回答
  • 0 关注
  • 306 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信