在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');
}
有人可以指导这背后的原因是什么?
答案 0 :(得分:34)
引用文档(MDN):
等于(==)
如果两个操作数的类型不同,则JavaScript会转换 操作数然后应用严格的比较。如果任一操作数是一个数字 或者布尔值,如果可能,操作数将转换为数字;其他 如果任一操作数是一个字符串,则另一个操作数转换为a 如果可能的话。
此处的a
操作数类型为Number
,b
也会转换为数字。 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)
==
运算符不会比较类型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)
因为==
检查值相等,所以false
,0
和空字符串是等于。使用身份检查===
。
答案 8 :(得分:0)
==进行类型转换。 始终使用===。
在你的例子中,空字符串b被转换为0.所以a和b都是相同的。