-
if(xx)
如何做判断的? -
a==b
如何做判断的?
在学习判断true/false的时候我踩了不少坑,主要原因是因为当碰到类似的需求的时候总会从自己认为的去考虑。这种情况下大多数的结果都是错的
所以如果是判断if(xxx)
的时候我一般会记住5个falsey
值:
- 0
- NaN
- ''
- underfined
- null
�熟记上述的false值,贯穿你的整个JS学习的过程,当满足上述条件的时候我们都认为是false的,你会很容易判断出来
example:
if("hello"){
console.log("hello")
}
显然这种判断条件是不符合5个falsey值的,所以结果正常执行
if(""){
console.log('empty')
}
""
为空字符串,判断结果为false值,所以不会接着往下执行!
if(" ") {
console.log('blank')
}
要注意的是" "
不为空字符串,所以不满足5个false值,结果还是正常执行的。
if ([0]) {
console.log('array')
}
虽然看上去这是一个0,但是实际是一个以0为元素的数组,所以结果是正常执行
if('0.00'){
console.log('这句话会执行吗?')
}
这样看也是具有迷惑性的,其实'0.00'
是字符串,不满足上述的5个false值,结果为正常执行。
a==b
判断
a | b | 结果 |
---|---|---|
null | undefined | true |
Number | String | x==Number(y) |
Boolean | (any) | Number(x)==y |
Object | String/Number | toPrimitie(x)==y |
otherwise | otherwise | false |
type | Result |
---|---|
Undefine | NaN |
Null | 0 |
Boolean | true->1 / false ->0 |
String | "abc"->NaN "123"->123 |
Number()
type | Result |
---|---|
Undefine | NaN |
Null | 0 |
Boolean | true->1 / false ->0 |
String | "abc"->NaN "123"->123 |
toPrimitie()
type | Result |
---|---|
Object | 首先找valueof() 属性,如果没有定义,然后尝试找toString()属性 |
example:
"" ==0 //true
首先执行Number("")
,结果为0
,最后判断为true
" " ==0 //true
首先执行Number(" ")
,结果为0
,最后判断为true
"" == true //false 1 !== 0
'hello' == true
首先Number("hello")结果为NaN,而Number(true)结果为1,所以互不相等,结果为false
var obj = {
a: 0,
valueOf: funtion(){
return 1
}
}
obj =="[object object]"
obj ==1
obj == true
首先obj有valueof 方法,且回掉结果为1,1==1 结果为true
同样,true类型结果为1,所以判断结果为true
网友评论