Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 比较:x==a为真,x==b为真,但a==b为假_Javascript_Compare_Equals - Fatal编程技术网

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

Javascript 比较:x==a为真,x==b为真,但a==b为假,javascript,compare,equals,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(pro

我有以下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]['barcode'][j]
的计算结果怎么可能为false?我该如何比较这两个值呢?

Javascript类型可能是不稳定的,而且很可能是不同的类型。您必须做一些事情来平衡类型,例如

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

因为我们不知道这两个变量是什么,所以我们不能说。然而,我们可以猜测它们并非都是整数

来自MDN:

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


考虑以下几点:

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
与数字888进行比较时,存储在这些变量中的字符串首先转换为一个数字(其中
'888'
末尾的尾随空格被忽略),然后再进行比较。

什么是
console.log(产品类型[i]['barcode'][j])
?您应该提供更多的代码我猜888是字符串,并且在某个地方有一个空格,只是解释了为什么对一个数字进行非严格比较对两者都有效,而不是直接比较它们。是的,似乎最有可能。另一种可能是一个单元素数组。。。再说一次,记录它会显示它。因此,空间确实应该是关键。)实际上,我们可以做得更精细一点——至少一个值不是数字。我想说,至少两个值都不是数字,因为如果至少一个值是数字,非严格比较就可以了。参考-它可以带来惊喜,但定义明确。我不知道。。。我认为
b=[888]
console.log([888]);//[888]
console.log([888]==888)//这是一个笑话,运行barcode=barcode.trim();修正了这个问题。谢谢你的帮助