面试笔试中你或许会看到关于“if(xxx)”和“==”的判断
关于if(xxx)的判断
题目:如下代码会输出什么?
if("hello"){
console.log('hello');
}
if(""){
console.log('输出');
}
if(" "){
console.log('空格');
}
if([0]){
console.log('数组');
}
if('0'){
console.log('数字0');
}
我们需要从原理上去理解,所以js是如何处理的呢?
js会将括号里的内容强制转换成布尔类型,true就会输出,flase就不会输出
下面是不同类型转换成布尔型的规律,我们只需要记住这些规律就可以了
类型 | 转换后的结果 |
---|---|
undefined | false |
Null | false |
Boolean | 直接判断 |
Number | +0,-0或NaN都为false,其他为true |
String | 空字符串为false,其他都为true |
Obiect | true |
用这些规律再去看题,就会很清晰了
关于“ == ”的判断
题目:如下代码会输出什么?
"" == 0; //题目1
" " == 0; //题目2
"" == true; //题目3
"hello" == true; //题目4
"0" == true; //题目5
null == undefined; //题目6
var obj = {
a : 0,
valueOf: function(){return 1}
}
obj == "[object object]"; //题目7
obj == 1; //题目8
obj == true; //题目9
我第一次看到它们的时候,很想说,这到底是什么。。。。。
后来通过老师的讲解,知道了js面对这些代码时它的处理方式是什么
js会将String类型,Boolean类型会To Number,Object类型会To Primitive!!
To Number
类型 | To Number |
---|---|
undefined | NaN |
Null | 0 |
Boolean | true -- 1,false -- 0 |
String | "abc" -- NaN ,"123" -- 123 |
To Primitive
先尝试掉调用valueOf方法获取结果,如果没有定义再尝试调用toString方法获取结果
当然除了上面这些规律,我们还要单独记住两点
- null == undefined 的结果为true
- 其他的类型 == 后为false