題目:如何讓 (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