我有一个像
这样的字符串数组 var a = ['a','a','a'];
当我像a[0]==a[1]==a[2]
进行比较时,结果为false
但是当我将array的值更改为['1','1','1']
并像上面一样进行比较时,结果将是true
。
同样,当我将输入更改为['9','9','9']
时,以上比较将结果显示为false
。
有人能告诉我javascript中此行为背后的原因吗?
答案 0 :(得分:1)
您需要的是
a[0]==a[1] && a[0]==a[2]
在您的情况下,当您比较['1','1','1']时,发生了什么事
a[0] == a[1] // true
true == a[2] // true as true == '1'
答案 1 :(得分:0)
如果直接测试内部值,则更容易理解:
0==0==0
被理解为(0==0)==0
,因此0==0
是true
,接下来要测试的是(true)==0
,0
被解释为false
,而true==false
是false
。
对于其他比较,第一部分是相同的,但是1
或9
被解释为true
。
答案 2 :(得分:0)
发生的事情是这样执行它:
((a[0]==a[1])==a[2]):
1。
(a[0] == a[1]) => true
2。
(true == a[2]) => false
由于:1 == true
,数组[1,1,1]返回true
答案 3 :(得分:0)
这是预期的输出
// Case 1
var a = ['a','a','a'];
The output of
a[0] == a[1] --> true
Next Comparison
true == a[2] --> false // true != 'a';
// Case 2
var a = ['1','1','1'] ;
a[0] == a[1] --> true
true == a[2] --> true // true == "1"
但是,在情况2中,如果您使用strict equality
运算符,则结果将为假。
var a = ['1','1','1'] ;
// strict equality operator
console.log(a[0]===a[1]===a[2]);
// without strict equality operator
console.log(a[0]==a[1]==a[2]);
答案 4 :(得分:0)
如果看到运算符==
的{{3}},则为left-to-right
。因此,就您而言
何时
var a = ['a','a','a'];
a[0]==a[1]==a[2]
首先求值a[0]==a[1]
,然后用a[3]
求其结果意味着true == 'a'
返回false
。
如果根据关联性,var a = ['1','1','1'];
在表达式a[0]==a[1]==a[2]
中从左到右求值,则结果首先是'1' == '1'
,然后是true == '1'
,其次是{{1 }}。
如果true
首先var a = ['9','9','9'];
,然后'9' == '9'
时,最后评估为false。希望这会有所帮助。