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