关于JS中if(xx)和 a==b的判断

1. if结构

if结构先判断一个表达式的布尔值,然后根据布尔值的真伪,执行不同的语句。

基本形式

if (布尔值) {
    语句;
}

注意点:对于if结构,其括号里面的表达式,会被强制转换为布尔类型值。

下面给出一个例子:

if ('a') {
  console.log ('hello')
}
//hello

这里括号里是一个字符串'a',转换成布尔值是true,所以执行语句console.log ('hello')

还有一个例子:

if (0) {
  console.log ('hello')
}

这里括号里是一个数值0,转换成布尔值是false,所以不执行语句console.log ('hello')

如何知道一个数据的布尔值是true还是false,我们只需要记住一些特殊的值

转换成布尔值的结果
null false
undefined false
数值 +0 false
数值 -0 false
空字符串 '' false (要跟 ' ' 区分开来,这里中间有个空格,空格字符串转换成布尔值结果是true,跟空字符串不同)
NaN false

除了以上这些转换成布尔值是false,其它的转换成布尔值都是true

注意,if后面的表达式之中,不要混淆赋值表达式(=)、严格相等运算符(===)和相等运算符(==)。尤其是赋值表达式不具有比较作用。

例子:

var x = 1;
var y = 2;
if (x = y) {
  console.log(x);
}
// "2"

上面代码的原意是,当x等于y的时候,才执行相关语句。但是,不小心将严格相等运算符写成赋值表达式,结果变成了将y赋值给变量x,再判断变量x的值(等于2)的布尔值(结果为true)。

2. 相等运算符 ==

相等运算符用来比较相同类型的数据时,与严格相等运算符完全一样。比较不同类型的数据时,相等运算符会先将数据进行类型转换,然后再用严格相等运算符比较。

转换规则

x y 结果
null undefined true
Number String x == toNumber(y)
Boolean (any) toNumber(x) == y
object String or Number toNumber(x) == y
otherwise otherwise false

ToNumber

转换后结果
undefined NaN
Null 0
Boolean true转换为数值1;false转换为数值0
String "abc"非数字类的转换为NaN;"123"数字类的转换为相应的数值123

Toprimitive

对于Object来说,当其遇到类型转换时,会先尝试调用valueOf进行转换,如果没有的话,再用toString进行转换;转换成原始类型后,在根据上面的规则转换。

相等运算符隐藏的类型转换,时常会带来一些违反直觉的结果。所以建议不要使用相等运算符(==),最好只使用严格相等运算符(===)。

3.参考资料

JavaScript 教程

你可能感兴趣的:(关于JS中if(xx)和 a==b的判断)