可能重复:
隐含的字符串比较,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');
}
谁能指导一下这背后的原因是什么?
可能重复:
隐含的字符串比较,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');
}
谁能指导一下这背后的原因是什么?
引用文档(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!
...这正是为什么几乎总是建议使用===
(严格相等)运算符的原因。
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
}
==
javascript 中的运算符不比较类型,因此0=='' === true
(因为数字字符串的''
计算结果为 0)或0==false === true
(因为 boolfalse
的计算结果为0
)比较类型,您可以使用===
operator.
在这里,您将找到有关比较的有用信息。
Javascript 会自动转换不同类型的变量进行比较。这是非严格类型语言的一个共同特征。
如果您需要比较变量并检查类型,请使用===
运算符。
在大多数编程语言(包括 javascript)""
中,(字符串)、0
(整数)、\x0
(null)都失去了相同的意思:“空”。发生的事情是您的 javascript 引擎发现"" == 0
错误,因为==
它转换0
为整数。这又是假的,所以它转换0
为 null 是假的,然后它转换0
为一个空字符串。(不确定这是否是正确的转换顺序)。要使条件“完全”匹配(无转换),请使用===
代替==
== 进行类型转换。始终使用 ===。
在您的示例中,b 的空字符串被转换为 0。所以 a 和 b 都是相同的。
因为表示为数字的空字符串为零。如果你比较苹果和橙子,你应该想想如果你的橙子是苹果,它会是什么样子。
因为胁迫。===
在 JavaScript 中用于比较通常是一个更好的主意。
因为==
检查值相等所以false
,0
并且空字符串是相等的。使用身份检查===
。