Undefined 類型表示未定義嘲恍,它的類型只有一個(gè)值,就是 undefined着绷。任何變量在賦值前是 Undefined 類型蛔钙、值為 undefined锌云,一般我們可以用全局變量 undefined(就是名為 undefined 的這個(gè)變量)來表達(dá)這個(gè)值荠医,或者 void 運(yùn)算來把任意一個(gè)表達(dá)式變成 undefined 值。
但是呢,因?yàn)?JavaScript 的代碼 undefined 是一個(gè)變量彬向,而并非是一個(gè)關(guān)鍵字兼贡,這是 JavaScript 語言公認(rèn)的設(shè)計(jì)失誤之一,所以娃胆,我們?yōu)榱吮苊鉄o意中被篡改遍希,我建議使用 void 0 來獲取 undefined 值。
Undefined 跟 Null 有一定的表意差別里烦,Null 表示的是:“定義了但是為空”凿蒜。所以,在實(shí)際編程時(shí)胁黑,我們一般不會(huì)把變量賦值為 undefined废封,這樣可以保證所有值為 undefined 的變量,都是從未賦值的自然狀態(tài)丧蘸。
Null 類型也只有一個(gè)值漂洋,就是 null,它的語義表示空值力喷,與 undefined 不同刽漂,null 是 JavaScript 關(guān)鍵字,所以在任何代碼中弟孟,你都可以放心用 null 關(guān)鍵字來獲取 null 值贝咙。
[重學(xué)前端](https://time.geekbang.org/column/article/78884)--引用winter老師重學(xué)前端
在代碼里嘗試了上面的結(jié)論 發(fā)現(xiàn)只有在子作用域可以被篡改 在全局作用域不能被篡改
(function () {
"use strict";
function fn() {
var a = {};
var undefined = a; //在子作用域可以被篡改
var b = undefined;
console.log("undefined1:", undefined, a); //undefined1:{} {}
return undefined;
}
console.log("fn:", fn()); //{}
})();
var undefined = 123; //在全局作用域篡改不會(huì)影響
console.log("undefined2:", undefined); //undefined2: undefined