一共包括下面七種數據類型面試
Undefined 類型表示未定義,它的類型只有一個值,就是undefined。通常使用void 0 來獲取一個undefined的值。數組
Null 類型也只有一個值,就是 null,它的語義表示定義了可是爲空值.而且null是Javascript的一個關鍵字。因此通常不會把變量賦值爲undefined,這樣能夠保證全部值爲undefined的變量,都是從未賦值的天然狀態bash
Boolean有兩個值true和false,表示邏輯意義上的真和假。函數
字符串的最大長度爲2^53-1,Javascript中的字符串是永遠沒法變動的。一旦字符串建立出來沒法用任何方式改變字符串的內容,因此字符串具備值類型的特徵。ui
Javascript的Number類型基本符合雙精度浮點數規則
。而且引入了幾個特殊的狀況:spa
Javascript的+0和-0的檢測能夠經過1/x 是Infinity或者-Infinity來進行區分。 根據浮點數的定義,非整數的Number類型沒法用==來比較。prototype
經典的面試題: 在Javascript中,爲何0.1+0.2!=0.3 ? (這個面試題錯誤的不是結論,而是比較的方法,這個題裏面涉及到雙精度浮點小數部分轉化爲2進制計算的過程當中舍掉精度而形成值不許致使,正確的比較方法以下:)code
// 絕對值小於最小精度
console.log( Math.abs(0.1 + 0.2 - 0.3) <= Number.EPSILON);
複製代碼
Symbol能夠具備字符串類型的描述,即便描述相同,Symbol也不相等。cdn
var mySymbol = Symbol("my symbol");
複製代碼
可使用Symbol.iterator來自定義for..of在對象上的行爲。對象
var o = new Object
o[Symbol.iterator] = function() {
var v = 0
return {
next: function() {
return { value: v++, done: v > 10 }
}
}
};
for(var v of o)
console.log(v); // 0 1 2 3 ... 9
複製代碼
當使用==的時候會進行類型轉換。
每一種基本數據類型String、Number、Boolean、Symbol在對象中都有相對應的類。所謂裝箱轉換就是把基本數據類型轉換爲對應的對象。
Object.prototype.toString.call能夠準確的識別對象對應的基本類型。可是須要注意的是call自己會產生裝箱操做。因此須要配合typeof來區分基本數據類型仍是對象類型。
Javascript標準中規定了ToPrimitive函數,它是對象類型到基本數據類型的轉換。而且對象內部有valueOf和toString方法。當對對象進行不一樣的拆箱的時候調用順序會有所不一樣。(還須要注意一個點就是當對象做爲數組arr的變量取值的時候arr[obj]是先調用obj的toString的
)
// valueOf 和 toString必須返回原始值 不然繼續向下執行 最終拋出錯誤
var o = {
valueOf : () => {console.log("valueOf"); return {}},
toString : () => {console.log("toString"); return {}}
}
o * 2
// valueOf
// toString
// TypeError
// 先toString後valueOf
var o = {
valueOf : () => {console.log("valueOf"); return {}},
toString : () => {console.log("toString"); return {}}
}
String(o)
// toString
// valueOf
// TypeError
// Symbol.toPrimitive的優先級最高
var o = {
valueOf : () => {console.log("valueOf"); return {}},
toString : () => {console.log("toString"); return {}}
}
o[Symbol.toPrimitive] = () => {console.log("toPrimitive"); return "hello"}
console.log(o + "") // 若是沒有Symbol.toPrimitive,其實這個也是先調valueOf 而後再是toString
// toPrimitive
// hello
複製代碼
看下加法運算符的規範: