我有以下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的远程可能性如何?我该如何比较这两个值?
答案 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
比较a
和b
时,它们都是字符串 - 并且直接进行比较,没有任何类型转换。所以b
末尾的空白在这里很重要。
但是,当您将a
和b
与 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])