1.[] == ![]
结果:true
原因:[]是一个空对象,转换为数字为0;![]是boolean类型,[]是true,![]是false,转换为数字为0,相等
2. 对象转原始类型是根据什么流程运行的?
对象转原始类型,会调用内置的[ToPrimitive]函数,对于该函数而言,其逻辑如下:
- 如果Symbol.toPrimitive()方法,优先调用再返回
- 调用valueOf(),如果转换为原始类型,则返回
- 调用toString(),如果转换为原始类型,则返回
- 如果都没有返回原始类型,会报错
var obj = {
value: 3,
valueOf() {
return 4;
},
toString() {
return '5'
},
[Symbol.toPrimitive]() {
return 6
}
}
console.log(obj + 1); // 输出7
参考:https://javascript.info/object-toprimitive
3. 如何让if(a == 1 && a == 2)条件成立?
其实就是上一个问题的应用。
var a = {
value: 0,
valueOf: function() {
this.value++;
return this.value;
}
};
console.log(a == 1 && a == 2);//true
参考:https://sanyuan0704.github.io/frontend_daily_question/week03/015.html