比较字符串时,三等值给出错误的输出,但是对于整数,它给出正确的输出

时间:2019-06-26 10:36:14

标签: javascript equality

我有一个像

这样的字符串数组

var a = ['a','a','a'];

当我像a[0]==a[1]==a[2]进行比较时,结果为false 但是当我将array的值更改为['1','1','1']并像上面一样进行比较时,结果将是true

同样,当我将输入更改为['9','9','9']时,以上比较将结果显示为false

有人能告诉我javascript中此行为背后的原因吗?

5 个答案:

答案 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==0true,接下来要测试的是(true)==00被解释为false ,而true==falsefalse

对于其他比较,第一部分是相同的,但是19被解释为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。希望这会有所帮助。