javaScript真值和假值以及相等操作符

DayDreame發表於2018-05-01

真值和假值

undefined       false

null            false

布林值           true是true,false是false

數字             +0、-0和NaN都是false,其他都是true

字串           如果字串是空的(長度是0)就是false,其他都是true

物件             true

    

相等操作符(==和===)

下面分析一下不同型別的值用相等操作符(==)比較後的結果

型別x                                型別y                                 結果

null                                 undefined                             true

undefined                            null                                  true

數字                                 字串                                 x == toNumber(y)

字串                               數字                                   toNumber(x) == y

布林值                               任何型別                                toNumber(x) == y

任何型別                              布林值                                 x == toNumber(y)

字串或數字                          物件                                  x == toPrimitive(y)

物件                                 字串或數字                          toPrimitive(x) == y


toNumber 對不同 型別返回的結果如下:

值型別                                                      結果

undefined        NaN

null             0

布林值           如果是true,返回1;如果是false,返回0

數字             數字對應的值

字串           將字串解析成數字。如果字串中包含字母,返回NaN;如果是數字字元組成的,轉換成數字

物件             Number(toPrimitive(vale))


toPrimitive 對不同型別返回的結果如下:

值型別                                       結果

物件   如果物件的valueof方法的結果是原始值,返回原始值;如果物件的toString方法返回原始值,就返回這個值;別的情況下返回的將是一個錯誤複製程式碼


===操作符。如果比較的兩個值的型別相同,結果就如下;如果比較的兩個值型別不同,返回的就是false

型別(x)                                     值                                   結果

數字                            x和y數值相等(但不是NaN)                           true

字串                          x和y是相等的字元                                   true

布林值                          x和y都是true或false                                true

物件                            x和y引用同一個物件                                 true

下面的例子會讓你深入骨髓的理解(誇張誇張)

console.log('Mark' === true);           //false

console.log('Mark' === 'Mark')        //true

var name1 = {name:'Mark'};

var name2 = {name:'Mark'};

console.log(name1 === name2);           //true



相關文章