1、if的判断
JS的if语句会先对括号内的表达式求值,然后将表达式的结果转换为boolean类型再做判断。
- 对于括号里的表达式,会被强制转换为布尔类型
if(xxx){
}
原理
类型 | 结果 |
---|---|
Undefined | false |
Null | false |
Boolean | 直接判断 |
Number | +0, −0, 或者 NaN 为 false, 其他为 true |
String | 空字符串为 false,其他都为 true |
Object | true |
结果
- 1,3,4,5为 true
- 2 为 false
举例
// 题目1:
/* 字符串 */
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
2、== 的判断
JavaScript中有两种相等运算符,==和===
当两个操作数的类型相同时,==和===没有什么区别,
当两个操作数的类型不同时,===会直接返回false,而==会先转换操作数的类型,再比较它们是否相等。
如果两个值类型相同,则执行严格相等的运算
如果两个值的类型不同
如果一个是null,一个是undefined,那么相等
如果一个是数字,一个是字符串,先将字符串转为数字,然后比较
如果一个值是true/false则将其转为1/0比较
如果一个值是对象,一个是数字或字符串,则尝试使用valueOf和toString转换后比较
其它就不相等了
null==undefined;
NaN==NaN
"1"==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
类型 | 结果 |
---|---|
Undefined | NaN |
Null | 0 |
Boolean | ture -> 1, false -> 0 |
String | “abc” -> NaN, “123” -> 123 |
toPrimitive
对于 Object 类型,先尝试调用 .valueOf 方法获取结果。 如果没定义,再尝试调用 .toString方法获取结果
举例
"" == 0 //true 空字符转为数值是0
" " == 0 //true
"" == true //false
"" == false //true
" " == true //false
!" " == true //false
!" " == false //true
"hello" == true //false
"hello" == false //false
"0" == true //false
"0" == false //true
"00" == false //true
"0.00" == false //true
undefined == null //true
{} == true // false
[] == true //false
var obj = {
a: 0,
valueOf: function(){return 1}
}
obj == "[object Object]" //false 对于 Object 类型,先尝试调用 .valueOf 方法获取结果。 如果没定义,再尝试调用 .toString方法获取结
果
obj == 1 //true
obj == true //true
网友评论