题目:如何让 (a == 1 && a == 2 && a == 3) 的值为true?
来源:github.com/YvetteLau/S…javascript
本题主要考察的知识点有三个:前端
首先 == 操做运算符的数据隐式类型转换,如下是ECMA2016原文 java
ToPrimitive git
Object => Primitive规则 github
测试以下:学习
var a = [1,2,3]
a.valueOf = function(){
console.log('调用valueOf');
return 3;
}
a.toString = function(){
console.log('调用toString');
return this;
}
a == 3 //“调用valueOf” “调用toString”
var b = [1,2]
b[a] //“调用toString” “调用valueOf”
复制代码
//Symbol.toPrimitive优先级最高
let a = {
[Symbol.toPrimitive]: () => 2,
valueOf :function(){
console.log('调用valueOf');
return 3
},
toString :function(){
console.log('调用toString');
return 4;
}
};
a == 2 //true
复制代码
var date = new Date();
d //Fri May 24 2019 06:41:02 GMT+0800 (中国标准时间)
+d //1558651262982
date[Symbol.toPrimitive]('number');//1558651262982
date[Symbol.toPrimitive]();//error
复制代码
而关于本道题的答案,大佬们的回答很好且全面,直接看github的issue便可。此处不写。测试
参考文献ui