摘要:種基本類型操作符指示操作數(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)有被覆蓋,可以放心使用 undefined(window.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
摘要:有兩個(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...
摘要:然而,這一行為在年的被修復(fù)了。在現(xiàn)代瀏覽器中,的值將不能被重寫(xiě)我們需要支持或者更古老的瀏覽器怎么辦通常指令是安全的。都會(huì)計(jì)算得到另外一種選擇,你可以使用操作符安全地檢查是否已經(jīng)被賦值。雖然沒(méi)有被聲明,仍然會(huì)說(shuō)他是。 眾所周知,當(dāng)聲明一個(gè)變量,并且沒(méi)有給賦值的情況下,它的初始值是 undefined。但是在javascript中,怎么檢查一個(gè)值是否為 undefined 呢? 簡(jiǎn)單的回答...
摘要:一個(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...
摘要:表達(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...
摘要:解釋一行,執(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í)行一行)這也...
閱讀 1896·2021-11-11 16:55
閱讀 2106·2021-10-08 10:13
閱讀 755·2019-08-30 11:01
閱讀 2166·2019-08-29 13:19
閱讀 3293·2019-08-28 18:18
閱讀 2631·2019-08-26 13:26
閱讀 588·2019-08-26 11:40
閱讀 1879·2019-08-23 17:17