真值和假值
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