if判断
在js中一般不使用if(变量)的方式使用if条件语句,容易产生你所不希望的结果,
先来看看如下的代码
if ("hello") {
console.log("hello")
}//1
if ("") {
console.log('empty')
}//2
if (" ") {
console.log('blank')
}//3
看了上面三个if语句,你能准确得出结果吗?
来看第一个,if('hello')
和if(" ")
和if从直观上应该是输出结果,if("")
应该是不输出结果的,经过测试的却如此。那么再看下面的代码
if ([0]) {
console.log('array')
}
if('0.00'){
console.log('0.00')
}
这里就比较模糊了,按理说还是输出结果的,但是没有特别确定,经过测试都输除了结果。
那么上面的if是按照什么原理的呢?
js是把括号里面的变量转化成布尔类型的变量然后进行判断的。
类型 | 结果 |
---|---|
Undefined | false |
Null | false |
Boolean | 直接判断 |
String | 除了空字符串为false,其他为true |
Number | 除了0,-0,+0,Nan其他为 true |
Object | true |
记住这些以后看到if(变量)就可以轻松的得到结果了,当然最好还是避免使用判断语句中直接使用变量的情况。
相等运算符 ==
下面来看看不严格相等符号
==在比较相同类型的数据时,和===是一样的结果。不同的数据类型===会直接返回false,而==则不一样,有如下的规则
- 原始类型的值
原始类型的数据会转换成数值类型再进行比较。 - 对象与原始类型值比较
对象(这里指广义的对象,包括数组和函数)与原始类型的值比较时,对象转化成原始类型的值,再进行比较。 - undefined 和 null
undefined和null与其他类型的值比较时,结果都为false,它们互相比较时结果为true。
相等运算符的缺点:
相等运算符隐藏的类型转换,会带来一些违反直觉的结果。
0 == '' // true
0 == '0' // true
2 == true // false
2 == false // false
false == 'false' // false
false == '0' // true
false == undefined // false
false == null // false
null == undefined // true
' \t\r\n ' == 0 // true
所以日常最好使用严格相等运算符===。