关于if(xx)和|关于if(xx)和 a==b的判断解析
if(XXX)的判断
if (XXX) {}
首先括号中的XXX会被强制转换为布尔类型,那究竟是true 还是 false 呢?有如下原理可以参考:
类型 | 结果 |
---|---|
Undefined | false |
Null | false |
Boolean | 直接判断 |
Number | +0, ?0, 或者 NaN 为 false, 其他为 true |
String | 空字符串为 false,其他都为 true |
Object | true |
// 题目1:如下代码输出什么?
if ("hello") {
console.log("hello")
}// 题目2:如下代码输出什么?
if ("") {
console.log('empty')
}// 题目3:如下代码输出什么?
if (" ") {
console.log('blank')
}
// 题目4:如下代码输出什么?
if ([0]) {
console.log('array')
}if('0.00'){
console.log('0.00')
}
其中除了第二题的空字符串被转换为false, 其余全被是true。
==的判断 【关于if(xx)和|关于if(xx)和 a==b的判断解析】
==
先类型转换,再判断相等对不同类型的值有如下转换方法:
- 原始数据类型会转换成数值类型再做比较,toNumber( )
- 复杂类型调用 .valueOf 和 .toString方法转换为原始类型在做比较
- undeifined和null与其他类型值比较时都为 false, 它们相互比较时为 true
x | y | 结果 |
---|---|---|
null | undefined | true |
Number | String | x == toNumber(y) |
Boolean | (any) | toNumber(x) == y |
Object | String or Number | toPrimitive(x) == y |
otherwise | otherwise | false |
- 其中 toNumber 方法对不同类型的值有如下结果
type | Result |
---|---|
Undefined | NaN |
Null | 0 |
Boolean | ture -> 1, false -> 0 |
String | “abc” -> NaN, “123” -> 123 |
- toPrimitive: 对于 Object 类型,先尝试调用 .valueOf 方法获取结果。 如果没定义,再尝试调用 .toString方法获取结果。
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 急于表达——往往欲速则不达
- 布丽吉特,人生绝对的赢家
- 慢慢的美丽
- 尽力
- 一个小故事,我的思考。
- 家乡的那条小河