在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ HTML/ undefined 和 null
arguments 對象
類型轉換
構造函數(shù)
instanceof 操作符
自動分號插入
為什么不要使用 eval
對象使用和屬性
作用域與命名空間
this 的工作原理
typeof 操作符
相等與比較
閉包和引用
數(shù)組遍歷與屬性
Array 構造函數(shù)
原型
hasOwnProperty 函數(shù)
undefined 和 null
函數(shù)聲明與表達式
setTimeout 和 setInterval
for in 循環(huán)

undefined 和 null

JavaScript 有兩個表示‘空’的值,其中比較有用的是 undefined。

undefined 的值

undefined 是一個值為 undefined 的類型。

這個語言也定義了一個全局變量,它的值是 undefined,這個變量也被稱為 undefined。 但是這個變量不是一個常量,也不是一個關鍵字。這意味著它的可以輕易被覆蓋。

ES5 提示: 在 ECMAScript 5 的嚴格模式下,undefined 不再是 可寫的了。 但是它的名稱仍然可以被隱藏,比如定義一個函數(shù)名為 undefined

下面的情況會返回 undefined 值:

  • 訪問未修改的全局變量 undefined。
  • 由于沒有定義 return 表達式的函數(shù)隱式返回。
  • return 表達式沒有顯式的返回任何內容。
  • 訪問不存在的屬性。
  • 函數(shù)參數(shù)沒有被顯式的傳遞值。
  • 任何被設置為 undefined 值的變量。

處理 undefined 值的改變

由于全局變量 undefined 只是保存了 undefined 類型實際的副本, 因此對它賦新值不會改變類型 undefined 的值。

然而,為了方便其它變量和 undefined 做比較,我們需要事先獲取類型 undefined 的值。

為了避免可能對 undefined 值的改變,一個常用的技巧是使用一個傳遞到匿名包裝器的額外參數(shù)。 在調用時,這個參數(shù)不會獲取任何值。

    var undefined = 123;
    (function(something, foo, undefined) {
        // 局部作用域里的 undefined 變量重新獲得了 `undefined` 值

    })('Hello World', 42);

另外一種達到相同目的方法是在函數(shù)內使用變量聲明。

    var undefined = 123;
    (function(something, foo) {
        var undefined;
        ...

    })('Hello World', 42);

這里唯一的區(qū)別是,在壓縮后并且函數(shù)內沒有其它需要使用 var 聲明變量的情況下,這個版本的代碼會多出 4 個字節(jié)的代碼。

譯者注這里有點繞口,其實很簡單。如果此函數(shù)內沒有其它需要聲明的變量,那么 var 總共 4 個字符(包含一個空白字符) 就是專門為 undefined 變量準備的,相比上個例子多出了 4 個字節(jié)。

null 的用處

JavaScript 中的 undefined 的使用場景類似于其它語言中的 null,實際上 JavaScript 中的 null 是另外一種數(shù)據類型。

它在 JavaScript 內部有一些使用場景(比如聲明原型鏈的終結 Foo.prototype = null),但是大多數(shù)情況下都可以使用 undefined 來代替。

上一篇:原型下一篇:為什么不要使用 eval