饥人谷技术博客

js运算符之有猫病的if判断和==判断

2018-03-25  本文已影响6人  Coding破耳

初学js时,发现if()中判断的结果和==的判断结果竟然不太一样诶,真的是非常地有猫病了。下面根据js的6中数据类型,对两者进行对比说明!

1. if()的判断

括号里的数据强制转化成Boolean来判断

数据类型 结果
Undefined false
Null false
Boolean 输入即输出
Number +0, −0, NaN为false;其余为true
String ""为false( length 是0);其余为true
Object object为null或undefined时,为false;否则为true.

2. == 判断

2.1 对于左右两端数据类型一致的,==操作与===操作是一致的。

需要注意的是:

2.2 对于左右两端数据类型不一致的,需要对数据进行转化。

转化规则如下:

一端(x) 另一端(y) 结果
Null Undefined true
Number String x == toNumber(y)
Boolean (any) toNumber(x) == y
Number Object x == toNumber(y)
String Object x == toPrimitive(y)
其他情况 false

总结来说:

转化为number的规则:

type result
Undefined NaN
Null 0
Boolean true为1,false为0
Number 输入即输出
String "abc" -> NaN,"123"-> 123,"+1.23 ">"1.23","+1.2.1"->NaN
Object 先调用valueof,若有结果根据上面规则转换;若无结果调用tostring,然后根据上面规则转换

3. 实例解析

if()判断实例

题目1:如下代码输出什么?

if ("hello") {
    console.log("hello")
}

题目2:如下代码输出什么?

if ("") {
    console.log('empty')
}

题目3:如下代码输出什么?

if (" ") {
    console.log('blank')
}

题目4:如下代码输出什么?

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

题目5:如下代码输出什么?

if ([0]) {
    console.log('array')
}

题目6:如下代码输出什么?

if (1) {
    console.log('true')
}
if (0) {
    console.log('error')
}
if (0.00) {
    console.log('hehe')
}

==判断实例

"" == 0  //题目1
" " == 0  //题目2
"" == true  //题目3
"" == false  //题目4
" " == true  //题目5
!" " == true  //题目6
!" " == false  //题目7
"hello" == true  //题目8
"hello" == false //题目9
"0" == true  //题目10
"0" == false  //题目11
"00" == false  //题目12
"0.00" == false  //题目13
undefined == null  //题目14
{} == true  //题目15
[] == true  //题目16
var obj = { 
  a: 0, 
  valueOf: function(){return 1} 
} 
obj == "[object Object]"  //题目17
obj == 1  //题目18
obj == true  //题目19
上一篇 下一篇

猜你喜欢

热点阅读