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

if(xx)

判断原理: 对于if()里括号的表达式(如以下),会被强制转换为布尔类型

if条件句中有几种转化类型,需转换成布尔类型:

undefined转换成布尔类型是false。

null转换成布尔类型是false。

Number转换成布尔类型+0,-0或者nan为false,其余为true。

object转换成布尔类型是true。

string转换成布尔类型空字符串为false,其余都为true。

布尔类型就是布尔。


a =1 if(a) {

console.log('true')

}// true

a =0 if(a){

console.log('true')

}// false

a =NaN if(a){

console.log('true')

}//false

a =-1 if(a){

console.log('true')

}//false

if(string)

当if(string)时:除了空字符串,其他都为true。例如:

if('jirengu'){
    console.log('true')
} // true
if('   '){
    console.log('true')
} // true
if(''){
    console.log('true')
} // false
if('0.00'){
    console.log('true')
}//true

if(object)时:转化成布尔类型为true;

if(boolean)时:可以直接判断;

if(undefined)时:转化为布尔类型为false。

a = = b

相等运算符用来比较相同类型的数据时,与严格相等运算符完全一样。

比较不同类型的数据时,相等运算符会先将数据进行类型转换,然后再用严格相等运算符比较。类型转换规则如下:

1,原始类型的值:

原始类型的数据会转换成数值类型再进行比较。

1 == true // true
// 等同于 1 === Number(true)

0 == false // true
// 等同于 0 === Number(false)

2 == true // false
// 等同于 2 === Number(true)

2 == false // false
// 等同于 2 === Number(false)

'true' == true // false
// 等同于 Number('true') === Number(true)
// 等同于 NaN === 1

'' == 0 // true
// 等同于 Number('') === 0
// 等同于 0 === 0

'' == false  // true
// 等同于 Number('') === Number(false)
// 等同于 0 === 0

'1' == true  // true
// 等同于 Number('1') === Number(true)
// 等同于 1 === 1

'\n  123  \t' == 123 // true
// 因为字符串转为数字时,省略前置和后置的空格

上面代码将字符串和布尔值都转为数值,然后再进行比较。

2,对象与原始类型值比较:

对象(这里指广义的对象,包括数组和函数)与原始类型的值比较时,对象转化成原始类型的值,再进行比较。

[1] == 1 // true
// 等同于 Number([1]) == 1

[1] == '1' // true
// 等同于 Number([1]) == Number('1')

[1] == true // true
// 等同于 Number([1]) == Number(true)

上面代码中,数组[1]与数值进行比较,会先转成数值,再进行比较;与字符串进行比较,会先转成数值,然后再与字符串进行比较,这时字符串也会转成数值;与布尔值进行比较,两个运算子都会先转成数值,然后再进行比较。

3,undefined 和 null

undefined和null与其他类型的值比较时,结果都为false,它们互相比较时结果为true。

false == null // false
false == undefined // false

0 == null // false
0 == undefined // false

undefined == null // true

绝大多数情况下,对象与undefined和null比较,都返回false。只有在对象转为原始值得到undefined时,才会返回true,这种情况是非常罕见的。

你可能感兴趣的:(关于if(xx)与a = = b的判断)