摘要:種基本類型操作符指示操作數的類型使用通常情況下,使用是指對象下的屬性。即在瀏覽器端使用時,其實使用的是,而恰巧的初始值為。如何證實使用時,是使用而不是具體值。所以在全局環境下,如果對象沒有被覆蓋,可以放心使用,因為它是不可修改的。
定義
Undefined 是 JavaScript 中的一種基本數據類型,該類型有一個唯一值 undefined。
6種基本類型: Undefined Null Number String Boolean Symbol
// typeof 操作符指示操作數的類型 typeof undefined; // "undefined" typeof 2; // "number"使用
通常情況下,使用 undefined 是指 window 對象下的 undefined 屬性。
即在瀏覽器端使用 undefined 時,其實使用的是 window.undefined,而恰巧 window.undefined 的初始值為 undefined。
如何證實使用 undefined 時,是使用 window.undefined , 而不是具體值 undefined。
請看下面的例子:
null = 10; // 報錯,因為不能給具體的值進行賦值操作 undefined = 11; // 不報錯,因為 undefined 指的是 window 對象下的 undefined 屬性 "undefined" in window; // true
如果還有懷疑,可以再舉一個栗子:
"use strict"; undefined = 11; // Script snippet #1:2 Uncaught TypeError: Cannot assign to read only property "undefined" of object "#" // 嚴格模式下,給對象的只讀屬性賦值會報錯
window.undefined 在 ES3 中可修改為任意值,但在 ES5 中是不可寫、不可配置的屬性,其值永遠是 undefined。
所以在全局環境下,如果 window 對象沒有被覆蓋,可以放心使用 undefined(window.undefined),因為它是不可修改的。
window.undefined 是不可修改的,但 window 對象是可修改的
let a; a === undefined; // true a === window.undefined; // true // window.undefined 屬性不可修改 window.undefined = 11; window.undefined; // undefined
但是,在函數內部使用 undefined 可能并不可靠,雖然 undefined 是一種數據類型,但它并不是關鍵字,所以它可以作為標識符,例如:
(function () { let a; let undefined = "123"; console.log(a === undefined); // false console.log(a); // undefined console.log(undefined); // 123 console.log(window.undefined) // undefined })()
正如之前所說,使用 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();
可以看出,如果某段代碼復寫了 window 對象,在使用 undefined 時會出現一些問題,但總會有解決辦法的。
例如 jQuery 源碼里是這樣是使用的:
// 自執行函數里定義了兩個參數,但在調用時只傳了一個參數,所以第二個參數 undefined 的值為 undefined (function( window, undefined ) { // 構造 jQuery 對象 var jQuery = (function() { var jQuery = function( selector, context ) { return new jQuery.fn.init( selector, context, rootjQuery ); }; // 省略其他模塊的代碼 }); window.jQuery = window.$ = jQuery; })( window );
underscore 源碼里是這樣是使用的:
// 無論 void 操作符后面的表達式是什么,其返回值都為 undefined _.isUndefined = function(obj) { return obj === void 0; };賦值
給變量賦值為 undefined ,可以用以下幾種方式:
變量被聲明了,但沒有賦值時,該變量就等于 undefined;
調用函數時,應該提供的參數沒有提供,該參數等于 undefined;
對象沒有賦值的屬性,該屬性的值為 undefined;
函數沒有返回值時,默認返回 undefined;
執行 void(0),返回值為 undefined;
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/85061.html
摘要:有兩個可以表示空的值,分別是和,比較有作用的是前者。訪問聲明但未初始化的變量。有返回值時函數的表達式沒有顯式的返回任何內容。然而,為了比較其他變量和值,我們需要提前取得的值。因此,從標準實行后,全局變量已經是不再可寫。 Javascript 有兩個可以表示空的值,分別是 undefined 和 null,比較有作用的是前者。 undefined undefined 是一種值為 un...
摘要:然而,這一行為在年的被修復了。在現代瀏覽器中,的值將不能被重寫我們需要支持或者更古老的瀏覽器怎么辦通常指令是安全的。都會計算得到另外一種選擇,你可以使用操作符安全地檢查是否已經被賦值。雖然沒有被聲明,仍然會說他是。 眾所周知,當聲明一個變量,并且沒有給賦值的情況下,它的初始值是 undefined。但是在javascript中,怎么檢查一個值是否為 undefined 呢? 簡單的回答...
摘要:一個表示編譯器檢測到一個無效的引用值。在實際情況中,往往是在獲取一個未被賦值的引用時被拋出。任何一個函數上下文都有一個被稱為活動對象的變量對象。沒有找到的話,就會認為引用名沒有基礎值并拋出的錯誤。下沒有下的屬性僅存在于被啟動的情況下。 和其他語言相比,javascript中的對于undefined的理解還是有點讓人困惑的。特別是試著理解ReferenceErrors錯誤(x is no...
摘要:表達式沒有返回值,因此返回結果是。并不改變表達式的結果,只要讓表達式不返回值按慣例我們用來獲得這主要源自語言,當然使用或其他表達式也是可以的。不是數字的數字如果數學運算的操作數不是數字類型,就無法返回一個有效的數字,這種情況下返回值為。 這里的內容是讀書筆記,僅供自己學習所用,有欠缺的地方歡迎留言提示。 第一部分 類型和語法 第1章 類型ECMAScript語言類型包括Undefin...
摘要:解釋一行,執行一行這也意味著你可以使用同一個變量保存不同類型的數據二數據類型最新的標準定義了種數據類型種原型數據類型布爾值,和一個表明值的特殊關鍵字。我們稱這些類型的值為原始值四布爾值布爾值數據類型只能有兩個值,它們是文本和。 一、動態類型 JavaScript 是一種弱類型或者說動態語言。這意味著你不用提前聲明變量的類型,在程序運行過程中,類型會被自動確定。(解釋一行,執行一行)這也...
閱讀 1887·2021-11-11 16:55
閱讀 2088·2021-10-08 10:13
閱讀 750·2019-08-30 11:01
閱讀 2159·2019-08-29 13:19
閱讀 3286·2019-08-28 18:18
閱讀 2625·2019-08-26 13:26
閱讀 584·2019-08-26 11:40
閱讀 1876·2019-08-23 17:17