if(xx) 的判断判断
xx
的类型不外乎Undefined
Null
Boolean
Number
String
Object
,ES6 又新增了第七种 Symbol 类型的值
括号里的表达式,强制转换为布尔类型
- if(
undefined
)
if(undefined){
console.log('true');
}
// false
if(undefined)的布尔值为false
- if(null)
if(null){
console.log('true')
}
//false
if(null):null的布尔值为false
- if(
Boolean
)
if(true){
console.log('true');
}
//true
if(false){
console.log('true');
}
//false
if(null):布尔值直接判断
- if(
Number
)
if(+0){
console.log('true');
}
//false
if(-0){
console.log('true');
}
//false
if(NaN){
console.log('true');
}
//false
if(Number
):+0 -0 NaN为false,其他为true
- if(
String
)
if('string'){
console.log('true');
}
//true
if(''){
console.log('true');
}
//false
if(' '){
console.log('true');
}
//true
if(null): 空字符串为 false,其他都为 true
- if(
Object
)
if ([0]) {
console.log('array')
}
//true
if([1,3,4]){
console.log('true')
}
// true
if(object): object的布尔值为真
x==y的判断
- undefined == null
undefined == null
// true
undefined
转为为number为NaN(not a number)
null
转为为number为0
这个比较特殊,记住就行
- string == number
把string转为为number,当不能转化为number时为false
'12345' == 12345
// true
'abcde' == '12345'
//false
'' == 0
//true
' ' == 1
//true
- boolean == (any)
boolean转化为数字1(true)或者0(false),右边的值转为为数字再进行比较
true == 1 //true
false == 0 //true
true == null //false 其他值都不会等于 undefined 或 null。
false == null //flase 其他值都不会等于 undefined 或 null。
true == undefined //false undefined转为为number为NaN
false == undefined //false undefined转为为number为NaN
true == "" //false
false == "" //true 转为化number为 0
true == [] //false ,返回值为""(空字符)
// ⚠️
false ==[] //true 空数组[]调用 tostring ,结为"",number("")==0
// ⚠️
true == {} //false {}不能转化为数字,是一个字符串
// ⚠️
false == {} //false {}不能转化为数字,是一个字符串
// ⚠️
- (string or Number )== Object
[] == true // false
[] == false // true
var obj = [];
if (typeof obj.valueOf() === 'object') {
Number(obj.toString());
} else {
Number(obj.valueOf());
}
////obj.valueOf为对象
//obj.toString()结果是""
//number("")结果是0
对于 Object
类型,先尝试调用 valueOf()
方法,返回原始值,则直接使用Number()
。 valueOf()
返回的值是对象,调用toString()
,返回原始值,则直接使用Number()
。调用toString()
,返回对象就会报错。
总结
if(xx),强制转为为布尔类型再判断
undefined == null //true (特殊)
true == {} //false {}不能转化为数字,是一个字符串
x == y 的结果判断,先把 x y 往数字转,然后再判断
一个对象都不会等于 undefined 或 null,undefined == null // true
NaN === NaN //false
undefined转为为number为NaN
参考
JavaScript 中的相等性判断-MDN
Truth, Equality and JavaScript
JavaScript-Equality-Table
版权声明:本文为博主原创文章,未经博主许可不得转载