27

可能重复:
隐含的字符串比较,0='',但 1='1'

在javascript中执行以下案例,我得到0等于''(一个空字符串)

var a   =   0;
var b   =   '';//empty string
if(a==b){
    console.log('equal');//this is printed in console
}else{
    console.log('not equal');
}

谁能指导一下这背后的原因是什么?

4

9 回答 9

48

引用文档(MDN):

相等 (==)

如果两个操作数的类型不同,JavaScript 会转换操作数,然后应用严格比较。如果任一操作数是数字或布尔值,则尽可能将操作数转换为数字;否则,如果任一操作数是字符串,则尽可能将另一个操作数转换为字符串。

由于a这里的操作数类型是Number,因此也b被转换为 Number 。并Number('')评估为0

有时这可能非常令人惊讶。考虑一下,例如:

console.log(0 == '0');  // true
console.log(0 == '');   // true
console.log('' == '0'); // O'RLY?

... 或这个:

console.log(false == undefined); // false
console.log(false == null);      // false
console.log(null == undefined);  // fal.... NO WAIT!

...这正是为什么几乎总是建议使用===(严格相等)运算符的原因。

于 2012-09-14T09:50:18.330 回答
6

0, ""(空字符串),false在类型转换时,在技术上都具有相同的值。如果你需要严格对待它们,你可以使用===.

类似的编程语言也是如此,比如 PHP。

var a = 0;
var b = ''; //empty string
if(a == b){
    console.log('equal'); //this is printed in console
}else{
    console.log('not equal');
}

进行严格的比较:

if(a === b){
    console.log('equal');
}else{
    console.log('not equal'); //this is printed in console
}
于 2012-09-14T09:51:32.187 回答
2

==javascript 中的运算符不比较类型,因此0=='' === true(因为数字字符串的''计算结果为 0)或0==false === true(因为 boolfalse的计算结果为0)比较类型,您可以使用===operator.

在这里,您将找到有关比较的有用信息。

于 2012-09-14T09:50:28.927 回答
1

Javascript 会自动转换不同类型的变量进行比较。这是非严格类型语言的一个共同特征。

如果您需要比较变量并检查类型,请使用===运算符。

于 2012-09-14T09:50:25.657 回答
1

在大多数编程语言(包括 javascript)""中,(字符串)、0(整数)、\x0(null)都失去了相同的意思:“空”。发生的事情是您的 javascript 引擎发现"" == 0错误,因为==它转换0为整数。这又是假的,所以它转换0为 null 是假的,然后它转换0为一个空字符串。(不确定这是否是正确的转换顺序)。要使条件“完全”匹配(无转换),请使用===代替==

于 2012-09-14T09:50:38.947 回答
1

== 进行类型转换。始终使用 ===。

在您的示例中,b 的空字符串被转换为 0。所以 a 和 b 都是相同的。

于 2012-09-14T09:50:48.387 回答
1

因为表示为数字的空字符串为零。如果你比较苹果和橙子,你应该想想如果你的橙子是苹果,它会是什么样子。

于 2012-09-14T09:51:05.297 回答
1

因为胁迫。===在 JavaScript 中用于比较通常是一个更好的主意。

于 2012-09-14T09:51:05.357 回答
1

因为==检查值相等所以false0并且空字符串是相等的。使用身份检查===

于 2012-09-14T09:51:10.013 回答