为什么javascript将0等于空字符串?

时间:2012-09-14 09:49:06

标签: javascript if-statement comparison

  

可能重复:
  Implied string comparison, 0='', but 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');
}

有人可以指导这背后的原因是什么?

9 个答案:

答案 0 :(得分:34)

引用文档(MDN):

  

等于(==)

     

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

此处的a操作数类型为Numberb也会转换为数字。 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!

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

答案 1 :(得分: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
}

答案 2 :(得分:2)

javascript中的

==运算符不会比较类型0=='' === true(因为数字字符串''的计算结果为0)或0==false === true(因为bool false }评估到0)以比较类型,您可以使用===运算符。

Here您会找到有关比较的有用信息。

答案 3 :(得分:1)

Javascript会自动转换不同类型的变量进行比较。这是非严格类型语言的常见功能。

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

答案 4 :(得分:1)

在大多数编程语言中(包括javascript)""(字符串),0(整数),\x0(null)意味着同样的事情:“空”。由于"" == 0==转换为整数,因此您的javascript引擎会发现0为false。同样这是错误的,因此它将0转换为null,这是假的,因此它将0转换为空字符串。 (不确定这是否是正确的转换顺序)。要使条件“完全”匹配(无转化),请使用===取代==

答案 5 :(得分:1)

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

答案 6 :(得分:1)

因为强迫。在JavaScript中使用===进行比较通常是个更好的主意。

答案 7 :(得分:1)

因为==检查值相等,所以false0和空字符串是等于。使用身份检查===

答案 8 :(得分:0)

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

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