Javascript `[1] ==[1]`返回';假;和`[1]==1`返回“;真的;?

Javascript `[1] ==[1]`返回';假;和`[1]==1`返回“;真的;?,javascript,Javascript,我在javascript中发现了这种奇怪的行为 var v1 = [1]; var v2 = [1]; v1 == v2 // false v1 == 1 //true [1] == [1] // false 1 == [1] // true 为什么[1]=[1]返回false和[1]==1返回true?如果=的两个操作数彼此具有相同的类型(例如在[1]=[1]情况下,它们都是type对象),然后,==的行为与==完全相同。这两个数组不是完全相同的对象,因此返回false。请注

我在
javascript
中发现了这种奇怪的行为

var v1 = [1];
var v2 = [1];

v1 == v2  // false

v1 == 1 //true

[1] == [1] // false

1 == [1]    // true
为什么
[1]=[1]
返回
false
[1]==1
返回
true

如果
=
的两个操作数彼此具有相同的类型(例如在
[1]=[1]
情况下,它们都是type
对象
),然后,
==
的行为与
==
完全相同。这两个数组不是完全相同的对象,因此返回
false
。请注意:

var v1 = [1];
var v2 = v1;

v1 == v2; // true

当操作数具有不同类型时,它们都是强制的。在
1==[1]
的情况下,首先应用上面链接中的规则10,通过返回
'1'
toString()
将数组转换为原语。然后应用规则6(将字符串
'1'
转换为数字
1
),比较变成
1==1
,最后它们具有相同的类型,并与
==
进行比较。显然,
1===1
的计算结果为true。

数组是对象,因此[1]==1]正在比较两个单独的对象。我不确定为什么[1]==1。忘记javascript中的
==
。仅使用
===
==
在Javascript中基本上是邪恶的。除非您明确地想要进行类型转换,并且您完全理解它在代码遇到的所有情况下的作用,否则最好总是避免使用它。@DyrandzFamador是的,您几乎应该总是使用
=
。应谨慎使用
=
变量,并始终使用注释说明隐式强制转换的原因。在比较之前,最好使用
==
并在类型之间显式转换,例如使用
+str
parseInt(str,10)
将字符串转换为数字。