JavaScript中的null和undefined區(qū)別介紹
JavaScript中存在2個(gè)代表信息不存在的特殊值:null和undefined。個(gè)人認(rèn)為可以從以下角度來(lái)理解這兩個(gè)特殊值之間的區(qū)別:
1.null代表有存儲(chǔ)信息的容器(比如之前被賦過(guò)值的變量),但該容器中的內(nèi)容為空。
2.undefined代表不存在用于存儲(chǔ)信息的容器。
JavaScript中的null與其它多數(shù)編程語(yǔ)言中的null沒(méi)有什么區(qū)別,基本用于表示信息值為空;而在JavaScript中下述情況下表達(dá)式返回結(jié)果為undefined:
1.從未被賦過(guò)值的變量。
2.訪問(wèn)某個(gè)對(duì)象不存在的屬性值。
3.訪問(wèn)數(shù)組中不存在的成員。
4.調(diào)用沒(méi)有return語(yǔ)句的函數(shù)。
5.調(diào)用return語(yǔ)句為空(“return ;”)的函數(shù)。
事實(shí)上,和Infinity、NaN一樣,undefined在JavaScript中是一個(gè)全局變量,在ECMAScript 3中甚至可以被賦予其它值。ECMAScript 5糾正了這個(gè)錯(cuò)誤,并將undefined變量設(shè)定為只讀。
對(duì)于null和undefined之間的比較,可以使用===全等操作符。如果使用普通的==操作符,null與undefined是等價(jià)的:
console.log(null == undefined);//true
console.log(null === undefined);//false
在程序編寫(xiě)過(guò)程中,如果需要對(duì)某個(gè)變量賦以空值,一般使用null而不是undefined。其原因在于:
1.undefined一般認(rèn)為是屬于系統(tǒng)層面的、報(bào)錯(cuò)層面的信息缺失。
2.null一般認(rèn)為是屬于編程層面的、邏輯操作層面的信息值為空。
如果在程序中涉及類型轉(zhuǎn)換,那么當(dāng)轉(zhuǎn)換為number類型時(shí),null和undefined的結(jié)果是不一樣的:
1.undefined轉(zhuǎn)換為number的結(jié)果是NaN。
2.null轉(zhuǎn)換為number的結(jié)果是0。
值得一提的是,空字符串和空數(shù)組轉(zhuǎn)換成number后的結(jié)果也是0。
至于JavaScript中為什么要設(shè)計(jì)兩個(gè)表示“沒(méi)有”的值,可以參見(jiàn)阮一峰的博客文章。
實(shí)驗(yàn)
在下述實(shí)驗(yàn)代碼中,表達(dá)式結(jié)果均為undefined:
var a;
console.log(a);
function Sample(x){
this.x = x;
}
var s = new Sample();
console.log(s.x)
console.log(s.notExistVariable);
var n = [2,3,4];
console.log(n[8]);
function test(){
//no return value for this function
}
console.log(test());
function test2(){
return;
}
console.log(test2());
- javascript中undefined與null的區(qū)別
- 一文讓你徹底弄懂js中undefined和null的區(qū)別
- JavaScript undefined及null區(qū)別實(shí)例解析
- JavaScript中undefined和null的區(qū)別
- javascript中undefined與null的區(qū)別
- JavaScript中Null與Undefined的區(qū)別解析
- 詳解JavaScript中undefined與null的區(qū)別
- js中 關(guān)于undefined和null的區(qū)別介紹
- JS基礎(chǔ)之undefined與null的區(qū)別分析
- JS中null和undefined的區(qū)別
相關(guān)文章
js將列表組裝成樹(shù)結(jié)構(gòu)的兩種實(shí)現(xiàn)方式分享
最近做的任務(wù)提了新的需求,需要實(shí)現(xiàn)一個(gè)樹(shù)形結(jié)構(gòu),所以下面這篇文章主要給大家介紹了關(guān)于js將列表組裝成樹(shù)結(jié)構(gòu)的兩種實(shí)現(xiàn)方式,需要的朋友可以參考下2022-01-01
微信小程序tabBar組件切換與下拉刷新實(shí)現(xiàn)詳解
tabBar相對(duì)而言用的還是比較多的,但是用起來(lái)并沒(méi)有難,下面這篇文章主要給大家介紹了關(guān)于微信小程序全局配置之tabBar的相關(guān)資料,文中通過(guò)圖文以及示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-10-10
JavaScript腳本語(yǔ)言是什么_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
JavaScript是什么?這篇文章主要介紹了一種廣泛用于客戶端Web開(kāi)發(fā)的腳本語(yǔ)言JavaScript,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
JavaScript給每一個(gè)li節(jié)點(diǎn)綁定點(diǎn)擊事件的實(shí)現(xiàn)方法
這篇文章主要介紹了JavaScript給每一個(gè)li節(jié)點(diǎn)綁定點(diǎn)擊事件的實(shí)現(xiàn)方法,包括js循環(huán)給li綁定參數(shù)不同的點(diǎn)擊事件,需要的朋友可以參考下2016-12-12
JavaScript 語(yǔ)言精粹學(xué)習(xí)筆記
JavaScript建立在一些非常好的想法和少數(shù)非常壞的想法之上。2009-08-08
JS實(shí)現(xiàn)多張圖片預(yù)覽同步上傳功能
這篇文章主要介紹了JS實(shí)現(xiàn)多張圖片預(yù)覽同步上傳功能的相關(guān)資料,需要的朋友可以參考下2017-06-06
5秒后跳轉(zhuǎn)到另一個(gè)頁(yè)面的js代碼
跳轉(zhuǎn)到另一個(gè)頁(yè)面的方法有很多,在本文將為大家詳細(xì)介紹下js中如何實(shí)現(xiàn)5秒后跳轉(zhuǎn)到另一個(gè)頁(yè)面,感興趣的朋友可不要錯(cuò)過(guò)2013-10-10
JS實(shí)現(xiàn)光滑展開(kāi)合攏的菜單效果代碼
這篇文章主要介紹了JS實(shí)現(xiàn)光滑展開(kāi)合攏的菜單效果代碼,涉及JavaScript響應(yīng)鼠標(biāo)事件遍歷并改變頁(yè)面元素屬性的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09

