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

if(xx)

if后的括号里的表达式会被强制转换为布尔类型

if语句是编程语言中最常用的语句,语法:
if (condition) {
  //ture statement
} else {
  //false statement
}

其中condition可以是任意表达式,结果不一定布尔值,javascript解释器会自动调用Boolean()将表达式结果转为布尔值,如果表达式为真执行第一个代码块区域内语句,如果未假执行第二个代码区域块的语句。
只有一条语句的时候代码块不是必需的,出于维护性考虑我们建议添加。
if语句可以单独使用,也可以和多个else连续使用。

if(a>2) {
  //statement
}

if (a == 1) {
} else if ( a == 2) {
} else if (a == 3) {
} else {
}
数据类型 转换结果
Undefined false
Boolean 直接判断
Number +0, −0, 或者 NaN 为 false, 其他为 true
String 空字符串为 false,其他都为 true
Object true

number

a = 1
if(a) {
  console.log('true')
}   // true

a = -1
if(a) {
  console.log('true')
}   //false

a = NaN
if(a) {
  console.log('true')
}   //false

string

if('hello') {
  console.log('true')
}   // true

if(' ') {
  console.log('true')
}   // true

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

if('0.00') {
  console.log('true')
} 

Object

if([1,2]) {
  console.log('true')
}   // true

function f() {
  var b = 2;
  return b;
}

if(f()) {
  console.log('true')
}   //true

Undefined

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

Null

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

a == b 的判断

a b 结果
null undefined true
Number String x == toNumber(y)
Boolean (any) toNumber(x) == y
Object String or Num false

toNumber

type Result
Undefined NaN
Null 0
boolean ture -> 1, false -> 0
String “abc” -> NaN, “123” -> 123

toPrimitive

对于 Object 类型,先尝试调用 .valueOf 方法获取结果。 如果没定义,再尝试调用 .toString方法获取结果
string == number
"" == 0 //true
" " == 0 //true
"hello" == 0 //false
"hello" == 1 //false
"2" == 2 //true
boolean == (any)
"" == true //false
"" == false //true
" " == true //false
"hello" == true //false
1 == true //true
0 == false //true
undefined == false //false
undefined == true //false
null == false //false
null == true //false
object == number/string

object会试图使用valueOf和toString转换后比较

var obj = {
a: 0,
valueOf: function(){return 1}
}
obj == 1 //true
[] == 0 //true
[2] == 2 //true
一般来说:

做相等运算时,一般倾向于将不同的数据类型都转化为数值,或是转化为相同的数据类型.

-如果两个值类型相同,则执行严格相等的运算
-如果两个值的类型不同

1.如果一个是null,一个是undefined,那么相等。
2.如果一个是数字,一个是字符串,先将字符串转为数字,然后比较
3.如果一个值是true/false则将其转为1/0比较。
4.如果一个值是对象,一个是数字或字符串,则尝试使用valueOf和toString转换后比较。
5.其它就不相等了。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容