美文网首页
JavaScript中if (xx)和a==b的判断

JavaScript中if (xx)和a==b的判断

作者: C脖子 | 来源:发表于2018-05-07 16:43 被阅读231次

JavaScript中的很多操作都会有隐含的类型转换,这可能会导致一些违反直觉的结果。

if (xx) 的判断

JS的if语句会先对括号内的表达式求值,然后将表达式的结果转换为boolean类型再做判断。转换成boolean类型时遵循下列规则:

  • 如果表达式的值是一个对象,返回true
  • 如果表达式的值是一个空字符串,返回false
  • 如果表达式的值是一个非空字符串,返回true
  • 如果表达式的值是数值0,或NaN,返回false
  • 如果表达式的值是任意非零数值(包括Infinity),返回true
  • 如果表达式的值是null,返回false
  • 如果表达式的值是undefined,返回false

示例:

/* 字符串 */
if ("hello") {
  console.log("true");
} // true

if ("") {
  console.log("true");
} // true

if (" ") {
  console.log("true");
} // true

if ("0.00") {
  console.log("true");
} // true

/* 数值 */
if (0.00) {
  console.log("true");
} // false

/* 对象 */
if ({}) {
  console.log("true");
} // true

if ([]) {
  console.log("true");
} // true

相等操作符 ==

JavaScript中有两种相等运算符,=====
当两个操作数的类型相同时,=====没有什么区别,
当两个操作数的类型不同时,===会直接返回false,而==会先转换操作数的类型,再比较它们是否相等。

"666" == 666 // true,转换后相等
“666" === 666 // false,因为数据类型不同

在转换操作数的类型时,==!=遵循以下规则:

  • 如果其中一个操作数是布尔值,则将其转换为数值——false转换为0,而true转换为1
false -- 0 // true
true -- 1 // true
  • 如果一个操作数是字符串,而另一个是数值,则将字符串转换为数值
"" == true // false,空字符转为数值是0
"5" == 5 // true
"str" == 5 // false,"str"转换为数值是NaN
"NaN" == NaN // false,NaN不等于任何数值
  • 如果一个操作数是对象,则现将对象转换为原始类型的值,调用对象的valueOf()方法,如果得到的还是对象则调用toString()方法转换为字符串。然后再按照上面的规则判断
[] == false // true, [].valueOf()仍返回[], [].toString返回""空字符串
[0] == true // false, 这什么鬼
["0.00"] == true // false

还有一些其他的规则

  • nullundefined相等
null == undefined // true
  • nullundefined与其他类型比较时不会转换为其他类型
null == 0 // false
undefined == 0 // false
  • 如果有一个操作数是NaN,则==返回false;即使两个操作数都是NaN==也返回false
NaN == NaN // false
NaN != NaN // true
  • 如果两个操作书都是对象,则比较它们是不是同一个对象。
var obj1 = {};
var obj2 = {};
console.log(obj1 == obj2); // false

var obj1 = {};
var obj2 = obj1;
console.log(obj1 == obj2); // true

相等和严格相等

使用相等==会进行隐含的类型转换,所以建议不言使用==,只是用严格相等运算符===

0 == ''// true
1 == true // true
2 == true // false
0 == '0' // true
false == 'false' // false
false == '0' // true
' \t\r\n ' == 0 // true

相关文章

网友评论

      本文标题:JavaScript中if (xx)和a==b的判断

      本文链接:https://www.haomeiwen.com/subject/zsqvrftx.html