Function,Arrayd其實也是object,部分文章會把Function也歸爲基本數據類型。ES6裏添加了symbol,是基本數據類型javascript
typeof操做符返回一個字符串,表示未經計算的操做數的類型java
| 對應表 |git
圖片原文連接typeof好玩的就是何時是object何時是function(此問題面試一問估計會問倒一批人哈哈)。畢竟function自己也是object,如Specification所示,function實現了call方法。仔細一想,call貌似也只能在function中起做用。好比用call來實現繼承(雖然看起來略顯醜陋)github
雙等不判斷類型,三等判斷類型。這種機制會有一些騷操做。 好比0 == ''爲true, [0] == false爲true等。
以前有個特別火的問題,if(a==1 & a==2 & a== 3)可否斷定爲true?。
答:雙等時若是左右類型不一樣,會調用valueOf,若是valueOf仍是類型不一樣再調用toString。因此解決上面的問題,重寫對象的valueOf或者toString方法便可。下面兩段代碼面試
const a = {
i: 1,
valueOf: function () {
return a.i++;
},
//toString: function () { 重寫valueOf和toString均可以
// return a.i++;
//}
}
if(a == 1 && a == 2 && a == 3) {
console.log('Hello World!');
}
複製代碼
對於if(a==1 & a==2 & a== 3)爲true這個問題,我也有一個另類的實現思路,即經過運算符重載實現。能夠經過babel來實現運算符重載,令a的==操做符永遠返回true。有興趣能夠搜一下運算符重載的babel插件,在此就不贅述。bash
原文連接(github.com/sparkxxxxxx…)babel