解析:
== 中,左右两边都需要转换为数字然后进行比较。
[]转换为数字为0。
![] 首先是转换为布尔值,由于[]作为一个引用类型转换为布尔值为true,
因此![]为false,进而在转换成数字,变为0。
0 == 0 , 结果为true
JS中,类型转换只有三种:
转换具体规则如下:
注意"Boolean 转字符串"这行结果指的是 true 转字符串的例子
===叫做严格相等,是指:左右两边不仅值要相等,类型也要相等,例如'1'===1的结果是false,因为一边是string,另一边是number。
==不像===那样严格,对于一般情况,只要值相等,就返回true,但==还涉及一些类型转换,它的转换规则如下:
console.log({a: 1} == true);//falseconsole.log({a: 1} == "[object Object]");//true
对象转原始类型,会调用内置的[ToPrimitive]函数,对于该函数而言,其逻辑如下:
var obj = { value: 3, valueOf() { return 4; }, toString() { return '5' }, [Symbol.toPrimitive]() { return 6 }}console.log(obj + 1); // 输出7
其实就是上一个问题的应用。
var a = { value: 0, valueOf: function() { this.value++; return this.value; }};console.log(a == 1 && a == 2);//true