成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript 中 undefined 的使用

cnio / 2795人閱讀

摘要:種基本類型操作符指示操作數(shù)的類型使用通常情況下,使用是指對(duì)象下的屬性。即在瀏覽器端使用時(shí),其實(shí)使用的是,而恰巧的初始值為。如何證實(shí)使用時(shí),是使用而不是具體值。所以在全局環(huán)境下,如果對(duì)象沒(méi)有被覆蓋,可以放心使用,因?yàn)樗遣豢尚薷牡摹?/p>

定義

Undefined 是 JavaScript 中的一種基本數(shù)據(jù)類型,該類型有一個(gè)唯一值 undefined。

6種基本類型: Undefined Null Number String Boolean Symbol

// typeof 操作符指示操作數(shù)的類型
typeof undefined; // "undefined"
typeof 2; // "number"
使用

通常情況下,使用 undefined 是指 window 對(duì)象下的 undefined 屬性。
即在瀏覽器端使用 undefined 時(shí),其實(shí)使用的是 window.undefined,而恰巧 window.undefined 的初始值為 undefined。

如何證實(shí)使用 undefined 時(shí),是使用 window.undefined , 而不是具體值 undefined

請(qǐng)看下面的例子:

null = 10; // 報(bào)錯(cuò),因?yàn)椴荒芙o具體的值進(jìn)行賦值操作
undefined = 11; // 不報(bào)錯(cuò),因?yàn)?undefined 指的是 window 對(duì)象下的 undefined 屬性
"undefined" in window; // true

如果還有懷疑,可以再舉一個(gè)栗子:

"use strict";
undefined = 11; 
// Script snippet #1:2 Uncaught TypeError: Cannot assign to read only property "undefined" of object "#"
// 嚴(yán)格模式下,給對(duì)象的只讀屬性賦值會(huì)報(bào)錯(cuò)

window.undefined 在 ES3 中可修改為任意值,但在 ES5 中是不可寫(xiě)、不可配置的屬性,其值永遠(yuǎn)是 undefined。

所以在全局環(huán)境下,如果 window 對(duì)象沒(méi)有被覆蓋,可以放心使用 undefinedwindow.undefined),因?yàn)樗遣豢尚薷牡摹?/p>

window.undefined 是不可修改的,但 window 對(duì)象是可修改的

let a;
a === undefined;         // true
a === window.undefined;  // true

// window.undefined 屬性不可修改
window.undefined = 11;
window.undefined; // undefined

但是,在函數(shù)內(nèi)部使用 undefined 可能并不可靠,雖然 undefined 是一種數(shù)據(jù)類型,但它并不是關(guān)鍵字,所以它可以作為標(biāo)識(shí)符,例如:

(function () {
    let a;
     let undefined = "123";
     console.log(a === undefined); // false
     console.log(a); // undefined
     console.log(undefined); // 123
     console.log(window.undefined) // undefined
})()

正如之前所說(shuō),使用 window.undefined 也并不一定可靠,再看下面的例子:

function fun() {
   let undefined = "hello world",
       f = {},
       window = {
           "undefined": "abc"
       };
   console.log(undefined);// hello world
   console.log(window.undefined); //abc
   console.log(f.a === undefined); //false
   console.log(f.a === void 0); //true
}
fun();

可以看出,如果某段代碼復(fù)寫(xiě)了 window 對(duì)象,在使用 undefined 時(shí)會(huì)出現(xiàn)一些問(wèn)題,但總會(huì)有解決辦法的。

例如 jQuery 源碼里是這樣是使用的:

// 自執(zhí)行函數(shù)里定義了兩個(gè)參數(shù),但在調(diào)用時(shí)只傳了一個(gè)參數(shù),所以第二個(gè)參數(shù) undefined 的值為 undefined
(function( window, undefined ) { 
    // 構(gòu)造 jQuery 對(duì)象 
    var jQuery = (function() { 
        var jQuery = function( selector, context ) {
            return new jQuery.fn.init( selector, context, rootjQuery );
        };
         // 省略其他模塊的代碼
     }); 
     window.jQuery = window.$ = jQuery; 
 })( window );

underscore 源碼里是這樣是使用的:

// 無(wú)論 void 操作符后面的表達(dá)式是什么,其返回值都為 undefined
_.isUndefined = function(obj) {
    return obj === void 0;
};
賦值

給變量賦值為 undefined ,可以用以下幾種方式:

變量被聲明了,但沒(méi)有賦值時(shí),該變量就等于 undefined;

調(diào)用函數(shù)時(shí),應(yīng)該提供的參數(shù)沒(méi)有提供,該參數(shù)等于 undefined

對(duì)象沒(méi)有賦值的屬性,該屬性的值為 undefined;

函數(shù)沒(méi)有返回值時(shí),默認(rèn)返回 undefined

執(zhí)行 void(0),返回值為 undefined;

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/85061.html

相關(guān)文章

  • 細(xì)說(shuō) Javascript 拾遺篇(二) : undefined 和 null

    摘要:有兩個(gè)可以表示空的值,分別是和,比較有作用的是前者。訪問(wèn)聲明但未初始化的變量。有返回值時(shí)函數(shù)的表達(dá)式?jīng)]有顯式的返回任何內(nèi)容。然而,為了比較其他變量和值,我們需要提前取得的值。因此,從標(biāo)準(zhǔn)實(shí)行后,全局變量已經(jīng)是不再可寫(xiě)。 Javascript 有兩個(gè)可以表示空的值,分別是 undefined 和 null,比較有作用的是前者。 undefined undefined 是一種值為 un...

    My_Oh_My 評(píng)論0 收藏0
  • 【譯】javascriptundefined可以被重寫(xiě)

    摘要:然而,這一行為在年的被修復(fù)了。在現(xiàn)代瀏覽器中,的值將不能被重寫(xiě)我們需要支持或者更古老的瀏覽器怎么辦通常指令是安全的。都會(huì)計(jì)算得到另外一種選擇,你可以使用操作符安全地檢查是否已經(jīng)被賦值。雖然沒(méi)有被聲明,仍然會(huì)說(shuō)他是。 眾所周知,當(dāng)聲明一個(gè)變量,并且沒(méi)有給賦值的情況下,它的初始值是 undefined。但是在javascript中,怎么檢查一個(gè)值是否為 undefined 呢? 簡(jiǎn)單的回答...

    codeKK 評(píng)論0 收藏0
  • [譯]Understanding javascript's 'undefined

    摘要:一個(gè)表示編譯器檢測(cè)到一個(gè)無(wú)效的引用值。在實(shí)際情況中,往往是在獲取一個(gè)未被賦值的引用時(shí)被拋出。任何一個(gè)函數(shù)上下文都有一個(gè)被稱為活動(dòng)對(duì)象的變量對(duì)象。沒(méi)有找到的話,就會(huì)認(rèn)為引用名沒(méi)有基礎(chǔ)值并拋出的錯(cuò)誤。下沒(méi)有下的屬性僅存在于被啟動(dòng)的情況下。 和其他語(yǔ)言相比,javascript中的對(duì)于undefined的理解還是有點(diǎn)讓人困惑的。特別是試著理解ReferenceErrors錯(cuò)誤(x is no...

    galaxy_robot 評(píng)論0 收藏0
  • 你不知道JavaScript卷 第一、二章

    摘要:表達(dá)式?jīng)]有返回值,因此返回結(jié)果是。并不改變表達(dá)式的結(jié)果,只要讓表達(dá)式不返回值按慣例我們用來(lái)獲得這主要源自語(yǔ)言,當(dāng)然使用或其他表達(dá)式也是可以的。不是數(shù)字的數(shù)字如果數(shù)學(xué)運(yùn)算的操作數(shù)不是數(shù)字類型,就無(wú)法返回一個(gè)有效的數(shù)字,這種情況下返回值為。 這里的內(nèi)容是讀書(shū)筆記,僅供自己學(xué)習(xí)所用,有欠缺的地方歡迎留言提示。 第一部分 類型和語(yǔ)法 第1章 類型ECMAScript語(yǔ)言類型包括Undefin...

    levy9527 評(píng)論0 收藏0
  • JavaScript-數(shù)據(jù)類型

    摘要:解釋一行,執(zhí)行一行這也意味著你可以使用同一個(gè)變量保存不同類型的數(shù)據(jù)二數(shù)據(jù)類型最新的標(biāo)準(zhǔn)定義了種數(shù)據(jù)類型種原型數(shù)據(jù)類型布爾值,和一個(gè)表明值的特殊關(guān)鍵字。我們稱這些類型的值為原始值四布爾值布爾值數(shù)據(jù)類型只能有兩個(gè)值,它們是文本和。 一、動(dòng)態(tài)類型 JavaScript 是一種弱類型或者說(shuō)動(dòng)態(tài)語(yǔ)言。這意味著你不用提前聲明變量的類型,在程序運(yùn)行過(guò)程中,類型會(huì)被自動(dòng)確定。(解釋一行,執(zhí)行一行)這也...

    沈儉 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<