#### 1. JavaScript規定了幾種類型:
1. 共七種數據類型
2. 基本數據類型:string number boolean symbol null undefined
3. 復雜數據類型:object array function
#### 2. JavaScript對象的底層數據結構是什么
1.
#### 3. Symbol類型在實際開發中的應用,可手動實現一個簡單的Symbol
1.
#### 4. JavaScript中的變量在內存中的具體存儲形式
1. 基本數據類型存儲在棧中
2. 復雜數據類型存儲在堆中
#### 5. 基本類型對應的內置對象,以及他們之間的裝箱拆箱操作
1.
#### 6. 理解值類型和引用類型
1. 值類型和引用類型操作方式不同
2. 存儲方式不同:棧(存取快,內存小)、堆(存取慢、內存大)
#### 7. null和undefined的區別
1. null表示“沒有對象”,即此處不應該有值
2. undefined表示此處應該有值,但是還沒有定義
#### 8. 至少可以說出三種判斷JavaScript數據類型的方式,以及他們的優缺點,如何準確的判斷數組類型
1. Object.prototype.toString.call( val ) === '[object Object]'
2. constructor:Number.constructor === Number:true,構造函數的constructor屬性指向有可能更改,所以不一定準確
3. typeof
#### 9. 可能發生隱式類型轉換的場景以及轉換原則,應如何避免或巧妙應用
1.
#### 10. 出現小數精度丟失的原因,JavaScript可以存儲的最大數字、最大安全數字,JavaScript處理大數字的方法,避免精度丟失的方法
1. JS中可存儲的最大數字:Number.MAX_VALUE:1.7976931348623157e+308
2. JS中能夠表示最大安全整數范圍是:Number.MIN_SAFE_INTEGER / Number.MAX_SAFE_INTEGER
#### 11. Javascript中,有一個函數,執行時對象查找時,永遠不會去查找原型,這個函數是?
1. hasOwnProperty方法只判斷對象自己是否擁有某個屬性,不去原形上進行查找
#### 12. 強制類型轉換
1. 轉換為Boolean:六個值轉換為 false ,其它全為 true:【 undefined, null, NaN, 0, +0, -0 】
2. 轉換為String:主要發生在字符串的加法運算時,當一個值為字符串,另一個值為非字符串,則另一個轉換為字符串
1. ‘2’ + 1// "21"
2. ‘2’ + true// "2true"
3. ‘2’ + undefined// "2undefined"
4. ‘2’ + false// "2false"
5. ‘2’ + null// "2null"
6. 當另一方為對象時,會有幾種情況
7. ‘2’ + {}//"2[object Object]"
8. ‘2’ + {a: 1, b: 2}//"2[object Object]"
9. ‘2’ + []//"2"
10. ‘2’ + [2,'array']//"22,array"
11. ‘2’ + {}//"2[object Object]"
12. ‘2’ + function(){}//"2function(){}"
13. let obj = { toString(){ return 'a' } } ==> ‘2’ + obj//"2a"
3. 轉換為Number:有加法運算符,無String類型的時候,都會優先轉換為Number類型
1. true + 0//1
2. true + true//2
3. true + false//1
4. 轉換為Number:除了加法運算符,其它運算符都會把運算自己轉成數值:- * /
1. ‘5’ - ‘2’//3 || ‘5’ * ‘2’//10 || ‘5’ / ‘2’//2.5
2. true - 1//0 || false - 1//-1 || '1' -1//0
3. '5' * []//0 || false / '5'//0 || 'abc' - 1//NaN
4. null + 1//1 || undefined + 1 //NaN