區(qū)分JS中的undefined,null,"",0和false
更新時間:2007年03月08日 00:00:00 作者:
在程序語言中定義的各種各樣的數(shù)據(jù)類型中,我們都會為其定義一個"空值"或"假值",比如對象類型的空值null,.NET Framework中數(shù)據(jù)庫字段的空值DBNull,boolean類型的假值false等等。在JavaScript中也有很多種的"空值"和"假值",那么它們都有什么共同點和不同點呢?
其實標(biāo)題里面我已經(jīng)列出了JavaScript中所有的"空值"和"假值",除了boolean值本身就是true和false這兩種情況外,其它數(shù)據(jù)類型的"空值"主要是undefined和defined這兩大類。這些空值的類型分別是:
typeof(undefined) == 'undefined'
typeof(null) == 'object'
typeof("") == 'string'
typeof(0) == 'number'
typeof(false) == 'boolean'
這五個值的共同點是,在if語句中做判斷,都會執(zhí)行false分支。當(dāng)然從廣義上來看,是說明這些數(shù)值都是其對應(yīng)數(shù)據(jù)類型上的無效值或空值。還有這五個值作!運算,結(jié)果全為:true。
這幾個值中也有不同,其中undefined和null比較特殊,雖然null的類型是object,但是null不具有任何對象的特性,就是說我們并不能執(zhí)行null.toString()、null.constructor等對象實例的默認(rèn)調(diào)用。所以從這個意義上來說,null和undefined有最大的相似性??纯磏ull == undefined的結(jié)果(true)也就更加能說明這點。不過相似歸相似,還是有區(qū)別的,就是和數(shù)字運算時,10 + null結(jié)果為:10;10 + undefined結(jié)果為:NaN。
另外""、0和false雖然在if語句表現(xiàn)為"假值",可它們都是有意義數(shù)據(jù),只是被作為了"空值"或"假值",因為:"".toString(),(0).toString()和false.toString()都是合法的可執(zhí)行表達(dá)式。
其實這5個值在上面所說的這些差異里,并不太會給程流程控制帶來太大的問題,那么要區(qū)分它們什么呢?需要注意區(qū)分的是這些值在轉(zhuǎn)換為String時的差異是比較大的,它們到String的轉(zhuǎn)換關(guān)系是:
String(undefined) -> "undefined"
String(null) -> "null"
String("") -> ""
String(0) -> "0"
String(false) -> "false"
這個轉(zhuǎn)換關(guān)系在做字符串累加時需要特別的注意,否這會出些意想不到的問題,今天就遇到一個null被默認(rèn)轉(zhuǎn)為"null"給弄得迷糊了好一陣子。
其實標(biāo)題里面我已經(jīng)列出了JavaScript中所有的"空值"和"假值",除了boolean值本身就是true和false這兩種情況外,其它數(shù)據(jù)類型的"空值"主要是undefined和defined這兩大類。這些空值的類型分別是:
復(fù)制代碼 代碼如下:
typeof(undefined) == 'undefined'
typeof(null) == 'object'
typeof("") == 'string'
typeof(0) == 'number'
typeof(false) == 'boolean'
這五個值的共同點是,在if語句中做判斷,都會執(zhí)行false分支。當(dāng)然從廣義上來看,是說明這些數(shù)值都是其對應(yīng)數(shù)據(jù)類型上的無效值或空值。還有這五個值作!運算,結(jié)果全為:true。
這幾個值中也有不同,其中undefined和null比較特殊,雖然null的類型是object,但是null不具有任何對象的特性,就是說我們并不能執(zhí)行null.toString()、null.constructor等對象實例的默認(rèn)調(diào)用。所以從這個意義上來說,null和undefined有最大的相似性??纯磏ull == undefined的結(jié)果(true)也就更加能說明這點。不過相似歸相似,還是有區(qū)別的,就是和數(shù)字運算時,10 + null結(jié)果為:10;10 + undefined結(jié)果為:NaN。
另外""、0和false雖然在if語句表現(xiàn)為"假值",可它們都是有意義數(shù)據(jù),只是被作為了"空值"或"假值",因為:"".toString(),(0).toString()和false.toString()都是合法的可執(zhí)行表達(dá)式。
其實這5個值在上面所說的這些差異里,并不太會給程流程控制帶來太大的問題,那么要區(qū)分它們什么呢?需要注意區(qū)分的是這些值在轉(zhuǎn)換為String時的差異是比較大的,它們到String的轉(zhuǎn)換關(guān)系是:
復(fù)制代碼 代碼如下:
String(undefined) -> "undefined"
String(null) -> "null"
String("") -> ""
String(0) -> "0"
String(false) -> "false"
這個轉(zhuǎn)換關(guān)系在做字符串累加時需要特別的注意,否這會出些意想不到的問題,今天就遇到一個null被默認(rèn)轉(zhuǎn)為"null"給弄得迷糊了好一陣子。
您可能感興趣的文章:
- 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é)
- JS中判斷null、undefined與NaN的方法
- javascript中的undefined 與 null 的區(qū)別 補(bǔ)充篇
- js null,undefined,字符串小結(jié)
- JavaScript中undefined和null的區(qū)別
相關(guān)文章
JavaScript Canvas繪制動態(tài)線框效果
這篇文章主要為大家詳細(xì)介紹了JavaScript Canvas繪制動態(tài)線框效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-08-08JavaScript高級編程之Array的用法總結(jié)
這篇文章主要為大家介紹了JavaScript中Array常見用法的總結(jié),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-11-11原生Javascript實現(xiàn)繼承方式及其優(yōu)缺點詳解
JS作為面向?qū)ο蟮娜躅愋驼Z言,繼承也是其非常強(qiáng)大的特性之一,那么這篇文章主要給大家介紹了關(guān)于原生Javascript實現(xiàn)繼承方式及其優(yōu)缺點的相關(guān)資料,需要的朋友可以參考下2021-07-07ionic App問題總結(jié)系列之ionic點擊系統(tǒng)返回鍵退出App
本篇文章主要介紹了ionic App問題總結(jié)系列之ionic點擊系統(tǒng)返回鍵退出App,具有一定的參考價值,有興趣的可以了解一下2017-08-08js實現(xiàn)把圖片的絕對路徑轉(zhuǎn)為base64字符串、blob對象再上傳
本文主要介紹了JavaScript把項目本地的圖片或者圖片的絕對路徑轉(zhuǎn)為base64字符串、blob對象再上傳的方法,具有一定的參考價值,需要的朋友一起來看下吧2016-12-12