javascript---不可靠的「undefined」

  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

相關文章
相關標籤/搜索