1. if(xx)的判断
括号里的表达式,会被强制转换为布尔类型,原理如下表:
表达式类型 | 转换结果 |
---|---|
undefined | false |
null | false |
boolean | 直接判断 |
number | 0, +0, −0, 或者 NaN 为 false, 其他为 true |
string | 空字符串为 false,其他都为 true |
object | true |
转换结果示例:
Undefined
var a;
if(a) {
console.log('Hello World!')
}
//不输出
Boolean
if(true) {
console.log('Hello World!')
}
//输出结果:Hello World!
if(false) {
console.log('Hello World!')
}
//不输出
Number
if(0) {
console.log('Hello World!')
}
//不输出
if(+0) {
console.log('Hello World!')
}
//不输出
if(NaN) {
console.log('Hello World!')
}
//不输出
if(123) {
console.log('Hello World!')
}
//输出结果:Hello World!
String
if('') {
console.log('Hello World!')
}
//不输出
if(' ') {
console.log('Hello World!')
}
//输出结果:Hello World!
if('123') {
console.log('Hello World!')
}
//输出结果:Hello World!
if('abc') {
console.log('Hello World!')
}
//输出结果:Hello World!
Object
if([0]) {
console.log('Hello World!')
}
//输出结果:Hello World!
if([0, 1, 2]) {
console.log('Hello World!')
}
//输出结果:Hello World!
if({1, 2, 3}) {
console.log('Hello World!')
}
//输出结果:Hello World!
2. a == b 的判断
对于相同数据类型a,b的判断较为简单,不作描述。以下记录不同数据类型的a,b的转换与判断。
原理:
a数据类型 | b数据类型 | 转换与判断结果 |
---|---|---|
null | undefined | true |
number | string | a == toNumber(b) |
boolean | (any) | toNumber(a) == b |
object | number或string | toPrimitive(a) == b |
otherwise | otherwise | false |
toNumber()转换原理:
类型 | 转换结果 |
---|---|
undefined | NaN |
null | 0 |
boolean | ture -> 1, false -> 0 |
string | 纯数字的字符串转换为数值,其它的为NaN |
null == undefined
null == undefined //true
number == string
将String转换为Number再行判断,a == toNumber(b),若b无法转换为数字,则结果为false
'' == 0 //true
'0' == 0 //true
'123' == 123 //true
'1.23' == 1.23 //true
'abc' == 0 // false
'abc123' == 123 // false
boolean == (any)
boolean在运算中转换数值有两种结果,true转换为1,false为0
true == '' //false
false == '' //true
true == ' ' //false
false == ' ' //true
true == '1.23' //false
false == '1.23' //false
true == '1' // true
false == '1' // false
true == '0' // false
false == '0' // true
object == number或string
对于 Object 类型,先尝试调用 .valueOf 方法获取结果。 如果没定义,再尝试调用 .toString方法获取结果
[] == true //false
var obj = {
a: 0,
valueOf: function(){return 1}
}
obj == "[object Object]" //false
obj == 1 //true
obj == true // true
网友评论