undefinedhtml
在 JavaScript 中,假設咱們想判斷一個是不是 undefined
,那麼咱們一般會這樣寫:jquery
if(a === undefined){//code}
可是,JavaScript 中的 undefined
並不可靠,咱們試着寫這樣一個函數:git
function test(a) { var undefined = 1; console.log(undefined); // => 1 if(a===undefined) { // ... } }
能夠看到,undefined
被輕易地修改成了 1
,使得咱們以後的對於 undefined
理解引發歧義。因此,在 JavaScript 中,把 undefined
直接解釋爲 「未定義」 是有風險的,由於這個標識符可能被篡改。express
在 ES5 以前,全局的 undefined
也是能夠被修改的,而在 ES5 中,該標識符被設計爲了只讀標識符, 假如你如今的瀏覽器不是太老,你能夠在控制檯中輸入如下語句測試一下:api
undefined = 1; console.log(undefined); // => undefined
如今咱們可以明確的,標識符 undefined
並不能真正反映 「未定義」,因此咱們得經過其餘手段得到這一語義。幸虧 JavaScript 還提供了 void
運算符,該運算符會對指定的表達式求值,並返回受信任的 undefined
:瀏覽器
void expression
最多見的用法是經過如下運算來得到 undefined
,表達式爲 0
時的運算開銷最小:函數
void 0; // or void(0);
全部須要得到 undefined
地方,都經過 void 0
進行了替代測試
固然,獲取undefined還有另外一種方式:看過jquery源碼的同窗,應該知道里面的當即執行函數:spa
(function(window,undefined) { // ... })(window)
在這個函數中,咱們沒有向其傳遞第二參數(形參名叫 undefined
),那麼第二個參數的值就會被認爲 「未定義」,所以,經過這種方式,在該函數的做用域中全部的 undefined
都爲受信的 undefined
。是否是很妙啊!!設計
摘自----https://yoyoyohamapi.gitbooks.io/undersercore-analysis/content/base/undefined%E7%9A%84%E5%A4%84%E7%90%86.html