1:原始值與對象最大的區別是如何比較的,每個對象有唯一的標識符并且只和自己相等。相反,所有的原始值只要編碼相同,就認為是相等。
2:如果函數中沒有任何顯示的返回值得話,那么會隱式的返回undefined.
3:undefined更多的時候表示的是不存在的元素,比如未初始的變化量,缺失的參數,訪問一個不存在的屬性。函數中沒有任何顯示的返回值。
4:檢測undefined.if(x===undefined) {}還可以用typeof 不過一般推薦是第一個方法。
5:null:他的意思是沒有對象。常用來表示空值。undefiend表示刪除一個對象屬性或是數組元素。null表示將屬性或者元素設置為空。
6:null:由于Js采用了java中的將變量分為原始值和對象的處理方式。同時也使用java中表示“非對象”的值null.遵循java的例子,當對null強制轉換的時候,會出現0.
8:為了彌補上面null的缺點引入了undefiend,那就是這個值沒有指向性,這個值強制轉換不回變成0。
7:防止改變undefiend:if(x===void){}
9:null出現:當正則匹配不到,或者是對象間沒有原型關系的時候。
10: typeof能檢測原始值和對象,并檢測出原始值得類型。
11:instanceof 用來檢測一個對象是否是特定構造函數的一個實例。
12:typeof null=object ? null instanceof ?object().false.
13:NaN 他的類型居然是number 出現的原因:number()中不能被解析的數字。失敗的操作Math.log(-1) 其中一個數是NaN的計算。
14:檢查一個值是否是NaN ?function(value) {retrun value!==value;還有個原生函數:isNaN();
為什么IsNaN()不能檢測非數字。。。他的原理是這樣的:先把這些值轉為數字,然后轉換可能變成NaN,所以返回錯誤的結果。最好就是檢測值的類型,并且使用IsNaN()函數。
15:infinity:是一個錯誤值,一是表示一個大到無法表示的數,一是表示一個數除了0.infinity比任何數字都大。-infinity比任何值都小。
16:全局函數isFinite();檢測一個數字是不是實際的值。既不是NAN也不是infinity.
17:由于js中所有的數字和符號是分開存儲的,所以每一個非負數都由一個負值,包括0.有符號的0可以知道數字是從哪方面接近0的。
18:js數字是64位的,也叫做雙精度。通常是按照十進制引入的,但是在內部時他們其實是二進制的浮點數表示的。在處理舍入錯誤的時候,通常推薦的是不直接比較非整數,取而代之,將邊界錯誤的上界考慮進來。這個上界叫機器精度。把他變大來比較細微的差別。
19:整型數字的范圍問題:安全整型:+-Math.pow(2,53) ?數組索引:【0,Math.pow(2,32)-1】通常情況下,和不超過53位的整型數字打交道是沒問題的,一旦遇到這些超過的,他們必須要以字符串的形式存儲起來,一旦要對他們進行運算,要特殊的庫來實現。
20:安全的整型:js只能安全的表示上述所說的范圍內的數,一旦超過這個范圍內的整型。,那么久和一般的實數集可能不會發生一一對應的關系了。