javascript中的undefined 與 null 的區(qū)別 補(bǔ)充篇
之前腳本之家發(fā)不過(guò)類似的文章
JavaScript null和undefined區(qū)別分析
JavaScript Undefined,Null類型和NaN值區(qū)別
先說(shuō)說(shuō)undefined:
Javascript中的變量是弱類型的(關(guān)于這個(gè)我想就不用我多解釋啦), 所以聲明變量的時(shí)候只需使用var關(guān)鍵字即可。如果是像C這樣的強(qiáng)類型語(yǔ)言, 聲明變量的時(shí)候如果沒(méi)有指定初始值,那么會(huì)給他一個(gè)默認(rèn)值,比如int變量的默認(rèn)值是0。但是在Javascript這樣的弱類型語(yǔ)言中,沒(méi)有辦法確定到底該給這樣的變量一個(gè)什么樣的默認(rèn)值,比如我聲明一個(gè)變量
var v1;
是給他false還是0,或者是'' ?
因?yàn)闆](méi)有類型,所以無(wú)法確定。 在Javascript中對(duì)于這種生命后沒(méi)有給定初始值的變量,就給他一個(gè)undefined。不過(guò)前提是這個(gè)變量必須已經(jīng)聲明,如果對(duì)于沒(méi)有聲明過(guò)的標(biāo)識(shí)符,就會(huì)出錯(cuò)??纯聪旅娴拇a。
var v1;
alert(v1); //undefined
alert(v2); //報(bào)錯(cuò)
再來(lái)說(shuō)說(shuō)null,Javscript有幾個(gè)基本類型,Number,String,Boolean,Object。對(duì)于Object 類型的變量,他有兩種情況,一種是他是一個(gè)對(duì)象的實(shí)例,另一種他是一個(gè)空引用null,熟悉類似Java這樣面向?qū)ο笳Z(yǔ)言的朋友應(yīng)該很容易理解。對(duì)于這兩種情況,他們的類型都是Object。Javascript中的變量,在給他賦值的時(shí)候,才
會(huì)確定它的類型,比如下面這樣。
var v1 = 1;
var v2 = true;
alert(typeof v1); //number
alert(typeof v2); //boolean
v2 = new Date();
alert(typeof v2); //object
v2 = "str";
alert(typeof v2); //string
v2 = null;
alert(typeof v2); //object
可以看到,null在 Javascript中代表一個(gè)特殊的Object類型的值,他用來(lái)表示空引用的概念,如果要將一個(gè)標(biāo)識(shí)符聲明稱object類型,但是暫時(shí)不給他實(shí)例,那么就可以將它先初始化為null,以便以后使用。
不一定絕對(duì)正確,簡(jiǎn)單來(lái)說(shuō),對(duì)于所有變量,只要聲明后還沒(méi)有指定初始值 ,那么他就是undefined,如果是Object類型用來(lái)表示空引用的概念,那么就是用null來(lái)表示。
下面是一些補(bǔ)充:
null :表示無(wú)值;
undefined : 表示一個(gè)未聲明的變量,或已聲明但沒(méi)有賦值的變量,或一個(gè)并不存在的對(duì)象屬性。==運(yùn)算符將兩者看作相等。如果要區(qū)分兩者,要使用===或typeof運(yùn)算符。
使用if (!object){}兩者就都包含了
補(bǔ)充:2006.12.6
var obj = "aaa";
var nullobj;
if (obj == null || obj == undefined || (!obj) ){
alert("obj is null");
}
if (nullobj == null){
alert("obj is null");
}
if (nullobj == undefined){
alert("obj is undefined ");
}
if ( !nullobj ){
alert("! obj ");
}
關(guān)于undefined和"undefined的補(bǔ)充(2007/1/30):
JScript中用于表示未定義的undefined標(biāo)識(shí)符到底是表示什么未定義?它和"undefined"(包括"在內(nèi))又有什么區(qū)別和聯(lián)系呢?為什么有的時(shí)候可以使用undefined來(lái)和變量做比較,而有的時(shí)候又不行呢?
underfined和"undefined"的區(qū)別大家一眼就能看出來(lái)。在一般的認(rèn)知下,我們認(rèn)為undefined是JScript提供的一個(gè)"關(guān)鍵字",而"undefined"卻毫無(wú)懸念的就是一個(gè)字符串,只是引號(hào)內(nèi)的內(nèi)容長(zhǎng)得和undefined一個(gè)樣。undefined和"undefined"的區(qū)別雖然是十分明顯的,但它們的聯(lián)系也是緊密的。
仔細(xì)閱讀JScript手冊(cè),其實(shí)這個(gè)underfined是一個(gè)"已定義"的Global值,而不是它的字面意義所表達(dá)的未定義。我們看下面這個(gè)代碼示例,很有趣:
<script language="Javascript">
alert(undefined);
alert(variable);
</script>
執(zhí)行的結(jié)果是:
我們稍微修改一下上面的代碼,添加一個(gè)typeof調(diào)用來(lái)看看:
<script language="Javascript">
alert(typeof undefined);
alert(typeof variable);
</script>
這下結(jié)果應(yīng)該是什么呢?顯示"object"和"undefined"嗎?當(dāng)然不是了,兩個(gè)alert調(diào)用都將顯示"undefined"。
所以u(píng)ndefined是腳本引擎定義的一個(gè)常量,它在腳本引擎初始化完畢后存在。它的實(shí)際作用是用來(lái)表示一個(gè)已定義的變量的為初始化狀態(tài)(uninitialized),比如var i;,這時(shí)這個(gè)i的值就是undefined,而i是實(shí)實(shí)在在define了的,只是未初始化。這時(shí)我們就可以寫這樣的表達(dá)式來(lái)對(duì)i做判斷,比如if ( i == undefined )。如果從未在代碼中出現(xiàn)過(guò)的變量被使用,這時(shí)的未定義的概念就是不undefined所描述的未初始化了,而是說(shuō)明該變量完全未被登記到腳本引擎的上下文中。使用類似if ( abc == undefined )的語(yǔ)句,將得到類似上圖中的第二個(gè)錯(cuò)誤提示。
在實(shí)際使用中,如果使用typeof來(lái)判斷變量是否未定義,是可以完全兼容未定義(undefined)和未初始化(uninitialized)兩種情況的,只是很多時(shí)我不喜歡使用 if ( typeof xxx == 'undefined' ) 這樣的寫法,因?yàn)閘iteral的字符串容易拼寫錯(cuò)誤,對(duì)用習(xí)慣了的強(qiáng)類型語(yǔ)言的角度來(lái)看也顯得不專業(yè)。
undefined:未定義 如聲明一個(gè)變量而不賦值給它,或使用一個(gè)不存在的對(duì)象屬性
null:空值 這個(gè)真的不好理解
好象是為了兼容以前的瀏覽器(IE4.0才有undefined吧)而把null和undefined認(rèn)為是相同
<script language="javascript">
var msg="使用未聲明的變量undef_x: ";
if(typeof(undef_x)=="undefined")msg+="undefined ";
else msg+="defined ";
msg+="\n";
msg+="聲明變量后未賦值undef_null_x: ";
var undef_null_x;
if(typeof(undef_null_x)=="undefined")msg+="undefined ";else msg+="defined ";
if(undef_null_x==null)msg+="null ";else msg+="not null";
msg+="\n";
msg+="變量賦值null null_x: ";
var null_x=null;
if(typeof(null_x)=="undefined")msg+="undefined ";else msg+="defined ";
if(null_x==null)msg+="null ";else msg+="not null";
msg+="\n";
msg+="變量賦\"\"值 x: ";
var x="";
if(typeof(x)=="undefined")msg+="undefined ";else msg+="defined ";
if(x==null)msg+="null ";else msg+="not null";
alert(msg);
</script>
- js判斷undefined類型,undefined,null, 的區(qū)別詳細(xì)解析
- JavaScript null和undefined區(qū)別分析
- JavaScript Undefined,Null類型和NaN值區(qū)別
- JS基礎(chǔ)之undefined與null的區(qū)別分析
- Javascript 中 null、NaN和undefined的區(qū)別總結(jié)
- undefined==null引發(fā)的兩者區(qū)別與聯(lián)系
- 詳解JavaScript中undefined與null的區(qū)別
- js中 關(guān)于undefined和null的區(qū)別介紹
- JavaScript中undefined和null的區(qū)別
- 一文讓你徹底弄懂js中undefined和null的區(qū)別
相關(guān)文章
js實(shí)現(xiàn)上下左右鍵盤控制div移動(dòng)
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)上下左右鍵盤控制div移動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-01-01file模式訪問(wèn)網(wǎng)頁(yè)時(shí)iframe高度自適應(yīng)解決方案
最近做到iframe的高度自適應(yīng)這個(gè)問(wèn)題;發(fā)現(xiàn)自己做的網(wǎng)頁(yè)是通過(guò)file方式訪問(wèn)的,將網(wǎng)頁(yè)代碼放到apache下通過(guò)http協(xié)議訪問(wèn),在iframe加載的時(shí)候調(diào)用如下js方法:果然網(wǎng)頁(yè)高度能夠自適應(yīng)(對(duì)于其他方案應(yīng)該也有效果,我沒(méi)有注意去嘗試)感興趣的朋友可以了解下2013-01-01js如何實(shí)現(xiàn)設(shè)計(jì)模式中的模板方法
都知道在js中如果定義兩個(gè)相同名稱的方法,前一個(gè)方法就會(huì)被后一個(gè)方法覆蓋掉,使用此特點(diǎn)就可以實(shí)現(xiàn)模板方法,感興趣的朋友可以了解下本文哈2013-07-07JS效率個(gè)人經(jīng)驗(yàn)談(8-15更新),加入range技巧
JS效率個(gè)人經(jīng)驗(yàn)談(8-15更新),加入range技巧...2007-01-01JS排序算法之希爾排序與快速排序?qū)崿F(xiàn)方法
這篇文章主要介紹了JS排序算法之希爾排序與快速排序?qū)崿F(xiàn)方法,結(jié)合實(shí)例形式分析了希爾排序與快速排序的原理及javascript實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-12-12javascript中的循環(huán)語(yǔ)句for語(yǔ)句深入理解
for循環(huán)是多數(shù)語(yǔ)言都有的。在javascript中,for循環(huán)有幾種不同的使用情況,下面為大家一一介紹下2014-04-04