>>> [1,2] == [1,2]
false
>>> [1,2] > [1,2]
false
>>> [1,2] >= [1,2]
true
>>> [1] == [1]
false
>>> 1 == [1]
true
求讲解下这些原理
>>> [1,2] == [1,2]
false
>>> [1,2] > [1,2]
false
>>> [1,2] >= [1,2]
true
>>> [1] == [1]
false
>>> 1 == [1]
true
求讲解下这些原理
我倒是不觉得这个问题有什么好值得多说的,我记得书上说过,只要记住两个数组是不能直接进行比较的,等于大于小于都不行。你看着数组里头的值都是一样的,但是这是伪数组,是对象,就比如说:
var arr = [1,2];
arr.test = function() {};
你觉得arr
还会和[1,2]
相等么。当然两个数组不能直接比较的原因会更复杂,我只是挑了一个比较好理解的地方说了一下。
至于最后一个我想也比较好理解,因为你使用的是==
不严格相等,所以如果两边比较类型不等的话会转换至相等类型,因为前一个是1
,类型是Number
,所以js会对后一个[1]
进行类型转换,Number([1])
的结果是1
,两个自然就是相等的了。
8 回答4.7k 阅读✓ 已解决
6 回答3.4k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
5 回答6.3k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
非常有意思的问题~
首先,比较符号有如下几种:
==
|===
|!=
|!==
|>
|>=
|<
|<=
先说一下
===
,其表示严格相等,首先比较类型,再比较值,如果都相同,则返回True,这个都木有什么问题的~ 比较简单,一带而过了。主要讨论下面一种比较类型:接着说一下
==
,其表示probably equal. 可以理解模糊判等。在ECMA-262中对其做了如下定义:
在11.9.3中具体定义了相等算法
请注意:
1.f
中提到Return true if x and y refer to the same object. Otherwise, return false.
其表示如果x和y都指向了同一个对象返回true,否则返回false
嗒嗒~~再来举个例子
因此
[1] == [1]
实际上是两个array对象的比较,如果两个对象不指向同一个指针,那么则返回false我们通过以下的小例子既可验证:
那么接下来解释以下,为什么
[1,2,3] >= [1,2,3]
为什么就是true了呢?以下是比较运算符的算法定义:
[1,2] > [1,2]
的比较实际上是首先转换成字符串,然后进行字符串比较。同样的道理,
1 == [1]
,因为1
不是object, 所以[1]
要转换成number来进行比较,因此返回true那么如何来判断两个array是否相等呢?
还有一个比较trick的方法