衆所周知,當聲明一個變量,而且沒有給賦值的狀況下,它的初始值是 undefined
。
可是在javascript中,怎麼檢查一個值是否爲 undefined
呢?javascript
在現代瀏覽器中,你能夠安全的直接比較將變量是與 undefined
進行比較java
if (name === undefined) { //... }
一些人反對直接使用 undefined
變量進行比較,由於在舊的瀏覽器中它容許被從新賦值,像下面這樣:git
undefined = "test"
在被從新賦值後,直接使用 undefined
將不能正確的檢測一個變量是否被賦值。
然而,這一行爲在2009年的ECMAScript 5被修復了。github
15.1.1.3 undefined
The value of undefined is undefined (see 8.1). This property has the attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }.undefined
的值是undefined
。這個屬性有不可寫,不可枚舉,不可配置的特性。瀏覽器
在現代瀏覽器中,undefined
的值將不能被重寫安全
一般undefined
指令是安全的。在應用中並無什麼理由須要修改undefined
的值。
Thomas的回答使用具備說服力的推理,論證了這一點。函數
我沒有遵從人們告訴我,我不該該使用
setTimeout
,由於有人能夠(這樣用):工具
window.setTimeout = function () { alert("Got you now!"); };
下面一行,它能夠從新定義參數,替換原始值,使
raw === undefined
看起來是假的。es5
若是你仍然很在乎,有兩個方法在即便全局 window.undefined
已經被重寫的狀況下,依然能夠檢查一個值是否爲 undefined
。翻譯
if (name === void(0)) { //... }
在這個例子中 0
沒有任何實際意義,你想要使用 1
or function(){}
也無所謂。 void(anything)
都會計算獲得undefiend
另一種選擇,你可使用typeof
操做符安全地檢查是否已經被賦值。你能夠檢查一個值的類型是否爲 "undefined
" 代替與全局的 undefined
比較.
if (typeof name === "undefined") { //... }
注意第二個選擇與前一個方案稍微有點差別。雖然name
沒有被聲明,typeof
仍然會說他是 undefined
。若是你直接使用 name
與 undefined
or void(0)
你會獲得ReferenceError
異常的錯誤.
在代碼中避免使用void(0)
或者 typeof x === "undefined"
,這些表達式不是自解釋的,應該包裝在isUndefined function
函數中,像這樣:
function isUndefined(value){ //得到undefined,保證它沒有被從新賦值 var undefined = void(0); return value === undefined; }
許多的工具庫已經部署了這個方法,例如: _.isUndefined
,underscore中的isUndefined方法
原文地址
原文標題:在javascript中怎樣檢查undefiend
初次翻譯,若有錯誤,歡迎指正