JS中关于if(xx)和 a==b的判断
2019-07-26 本文已影响0人
PingerL
一、JS中关于if(xxx)的判断:
if (xxx) {
}
js是如何处理的?我们先来看几道测试题
//如下代码输出什么?
//题目1
if ("hello") {
console.log("hello")
}
//题目2
if ("") {
console.log("empty")
}
//题目3
if (" ") {
console.log("blank")
}
//题目4
if ([0]) {
console.log('array')
}
//题目5
if('0.00'){
console.log('0.00')
}
以上题目代码的输出结果为:
- 题目1的输出结果:hello
- 题目2的输出结果:
- 题目3的输出结果:blank
- 题目4的输出结果: array
- 题目5的输出结果:0.00
即1,3,4,5条件语句中都为 true,2为 false
类型 | 结果 |
---|---|
Undefined | false |
Null | false |
Boolean | 直接判断 |
Number | +0, −0, 或者 NaN 为 false, 其他为 true |
String | 空字符串为 false,其他都为 true |
Object | true |
总结:在if条件语句中,任何一个值,只要它不是 undefined、null、 0、NaN或空字符串(""),那么无论是任何对象,即使是值为假的Boolean对象(P.S 不要将原始布尔值的true
和false
与Boolean对象的真或假混淆),在条件语句中都为真。
二、JS中关于a == b 的判断:
console.log("" == 0 ) // true
console.log(" " == 0 ) // true
console.log("" == true ) // false
console.log("" == false ) // true
console.log(" " == true )// false
console.log("" == 0 ) // true
console.log(" " == 0 ) //true
console.log("" == true ) //false
console.log("" == false ) //true
console.log(" " == true ) //false
console.log(" " == false) //true
console.log(!" " == true) //false
console.log(!" " == false) //true
console.log("hello" == true) //false
console.log("hello" == false) //false
console.log("0" == true) //false
console.log("0" == false) //true
console.log("00" == false) //true
console.log("0.00" == false) //true
console.log(undefined == null) //true
console.log([0] == 0) //true
var obj = {
a: 0,
valueOf: function(){return 1}
}
console.log(obj == "[object Object]") //false
console.log(obj == 1) //true
console.log(obj == true) //true
从以上结果可总结出:
x | y | 结果 |
---|---|---|
null | undefined | true |
Number | String | x == toNumber(y) |
Boolean | (any) | toNumber(x) == y |
Object | String or Number | ttoPrimitive(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方法获取结果。
总结:当比较运算涉及类型转换时, JavaScript 会按以下规则对字符串,数字,布尔或对象类型的操作数进行操作:
1、当比较数字和字符串时,字符串会转换成数字值。 JavaScript 尝试将数字字面量转换为数字类型的值。 首先, 一个数学上的值会从数字字面量中衍生出来,然后这个值将被转为一个最接近的Number类型的值。
2、如果其中一个操作数为布尔类型,那么布尔操作数如果为true,那么会转换为1,如果为false,会转换为整数0,即0。
3、如果一个对象与数字或字符串相比较,JavaScript会尝试返回对象的默认值。操作符会尝试通过方法valueOf和toString将对象转换为其原始值(一个字符串或数字类型的值)。如果尝试转换失败,会产生一个运行时错误。
P.S、注意:当且仅当与原始值比较时,对象会被转换为原始值。当两个操作数均为对象时,它们作为对象进行比较,仅当它们引用相同对象时返回true
小贴士:对于判断a == b
首先先往数字方面靠,字符串中空字符串为false
,文字字符串为NaN
(NaN和任何值不相等,包括其自身),其余的字符串为true