比较:x == a为真,x == b为真,但a == b为假

时间:2014-04-02 21:57:11

标签: javascript compare equals

我有以下javascript代码:

        console.log("Line: 89");
        console.log(products[i]['barcodes'][j]);
        console.log(barcode);
        console.log(barcode == products[i]['barcodes'][j]);
        console.log(barcode == 888);
        console.log(products[i]['barcodes'][j] == 888);
        console.log(888 == 888);

我在控制台中看到以下输出

Line: 89
888
888
false
true
true
true

barcode == products[i]['barcodes'][j]评估为false的远程可能性如何?我该如何比较这两个值?

3 个答案:

答案 0 :(得分:3)

请考虑以下事项:

var a = '888';
var b = '888    ';
console.log(a); // 888
console.log(b); // 888
console.log(a == b); // false
console.log(a == 888); // true
console.log(b == 888); // true

比较ab时,它们都是字符串 - 并且直接进行比较,没有任何类型转换。所以b末尾的空白在这里很重要。

但是,当您将ab number 888进行比较时,存储在这些变量中的字符串将首先转换为数字(其中的尾随空格) }的结尾被忽略了。

答案 1 :(得分:1)

好吧,因为我们不知道这两个变量中的哪一个是我们不能说的。但是我们可以猜测它们不是两个整数。

来自MDN:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators

  

如果两个操作数的类型不同,则JavaScript会转换   操作数,然后应用严格的比较。如果任一操作数是a   如果是数字或布尔值,操作数将转换为数字   可能;否则,如果任一操作数是字符串,则字符串操作数为   如果可能,转换为数字。如果两个操作数都是对象,那么   JavaScript比较操作数时相同的内部引用   在内存中引用相同的对象。

答案 2 :(得分:-2)

Javascript类型可能很脆弱,而且很可能类型不同。你必须做些什么来平衡类型,比如

parseInt(barcode) == parseInt(products[i]['barcodes'][j])