相等运算符
使用 == 时, 不同类型的值也可以被看作相等。这样的结果可能会使那些JavaScript开发者都感到困惑。
用下面表格分析一下不同类型的值用相等运算符比较后的结果

如果x 和 y 类型相同, JavaScript会用equals(相等) 方法比较两个值或对象。 没有列在这个表格中的其他情况都会返回false;
toNumber 和 toPrimitive 方法是内部的。并根据以下表进行估值
toNumber方法对不同类型返回结果如下:

toPrimitive 方法对不同类型返回的结果如下:

console.log('packt' ? true : false) // true;
console.log('pack' == true) // false;
为什么第二个是输出会是false呢?
1. 首先, 布尔值会被toNumber方法转成数,因此得到pack = 1
2. 其次, 用 toNumber 转换成字符串值。 因为字符串包含字母, 所以会被转换成NaN, 表达式就变成了 NaN == 1结果就是false]
console.log('pack' == false)?
为什么输出还是false呢?
首先, 布尔值会被toNumber 方法转成数, 因此 false = 0;
其次, 用 toNumber转换字符串,因为包含字符串, 所以返回是NaN , 表达式就变成了 NaN == 0 结果就是false
全等运算符 ===
如果比较的值类型不同,比较的结果就是false。 如果比较两个值类型相同, 结果会根据下表判断

console.log('packt' === true); // false
console.log('packt' === 'packt'); // true
var person1 = {name:'John'};
var person2 = {name:'John'};
console.log(person1 === person2); // false,不同的对象