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进行转换;转换成原始类型后,在根据上面的规则转换。
相等运算符隐藏的类型转换,时常会带来一些违反直觉的结果。所以建议不要使用相等运算符(
==
),最好只使用严格相等运算符(===
)。
网友评论