數(shù)據(jù)類型
Number
JavaScript不區(qū)分整數(shù)和浮點數(shù),統(tǒng)一用Number表示,以下都是合法的Number類型:
NaN;// NaN表示Not a Number,當無法計算結果時用NaN表示
Infinity;// Infinity表示無限大,當數(shù)值超過了JavaScript的Number所能表示的最大值時,就表示為Infinity
比較運算符
JavaScript允許對任意數(shù)據(jù)類型做比較:
false==0;//true
false===0;//false
第一種 == 比較,它會自動轉換數(shù)據(jù)類型再比較,建議避免使用,可以減少一些不必要的麻煩。
第二種 === 比較,它不會自動轉換數(shù)據(jù)類型,先比較數(shù)據(jù)類型,不一致返回false,如果一致,會繼續(xù)比較值是否相同。
【NaN】這個特殊的Number與所有其他值都不相等,包括它自己:
NaN === NaN; // false
唯一能判斷NaN的方法是通過isNaN()函數(shù):
isNaN(NaN); // true
【注】浮點數(shù)的相等比較:
1 / 3 === (1 - 2 / 3); // false
保險起見,在進行浮點類型的比較和運算的時候,如果可以選轉換成整數(shù)型,最好轉換為整數(shù)型再進行比較。
null和undefined
null表示一個“空”的值,它和0以及空字符串 '' 不同,0是一個數(shù)值,'' 表示長度為0的字符串,而null表示“空”。
JavaScript的設計者希望用null表示一個空的值,而undefined表示值未定義。事實證明,這并沒有什么卵用,區(qū)分兩者的意義不大。大多數(shù)情況下,我們都應該用null。undefined僅僅在判斷函數(shù)參數(shù)是否傳遞的情況下有用。
關于變量
strict模式
JavaScript在設計之初,為了方便初學者學習,并不強制要求用var申明變量。這個設計錯誤帶來了嚴重的后果:如果一個變量沒有通過var申明就被使用,那么該變量就自動被申明為全局變量:
i = 10; // i現(xiàn)在是全局變量
在同一個頁面的不同的JavaScript文件中,如果都不用var申明,恰好都使用了變量i,將造成變量i互相影響,產(chǎn)生難以調試的錯誤結果。
使用var申明的變量則不是全局變量,它的范圍被限制在該變量被申明的函數(shù)體內,同名變量在不同的函數(shù)體內互不沖突。在實際項目開發(fā)中,盡量使用局部變量(有機會后面會針對這一塊做詳解)。
為了修補JavaScript這一嚴重設計缺陷,ECMA在后續(xù)規(guī)范中推出了strict模式,在strict模式下運行的JavaScript代碼,強制通過var申明變量,未使用var申明變量就使用的,將導致運行錯誤。
啟用strict模式的方法是在JavaScript代碼的第一行寫上:
'use strict';
這是一個字符串,不支持strict模式的瀏覽器會把它當做一個字符串語句執(zhí)行,支持strict模式的瀏覽器將開啟strict模式運行JavaScript。
參考資料:廖雪峰的官方網(wǎng)站:https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000