In 这个答案 https://stackoverflow.com/a/8618383/7329有一个简单的函数可以返回包含原始值的数组的数组相等性。
但是,我不确定它为什么有效。这是函数:
function arrays_equal(a,b) { return !!a && !!b && !(a<b || b<a); }
我最感兴趣的是后半部分;这一点:
!(a<b || b<a)
为什么<
and >
比较数组时有效,但是==
不是吗?
JavaScript 中的小于和大于方法如何工作?
With <
/>
,数组首先转换为字符串,因此不提供可靠的检查相等性的方法。
==
不起作用,因为对象是通过引用检查的:
[] == []; // false, two separate objects
var a = [];
a == a; // true, refer to the same object
The <
/>
技巧是有缺陷的:
var a = [1, [2, 3]],
b = [[1, 2], 3];
!(a<b || b<a); // true
这评估为true
,因为它们都转换为字符串"1,2,3"
在检查之前(<
/>
不要“直接”为对象工作)。
所以基本上,您正在比较字符串的相等性。对于字符串来说,a == b
确实是一样的!(a<b || b<a)
- <
/>
对于字符串检查字符代码,因此两个相等的字符串既不会“更小”也不会“更大”,因为字符串中的任何字符代码都不是这种情况。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)