关于 if(xx)与 a == b 的判断

2018-07-31  本文已影响0人  饥人谷_清水

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
上一篇 下一篇

猜你喜欢

热点阅读