成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

我所理解的JavaScript中 undefined與null的區(qū)別

sf190404 / 963人閱讀

摘要:他們的布爾值都是,說到布爾值為的,通常包括空字符串這五種常見的對象。各自都是孤家寡人,不用拖家?guī)Э诘?,一人吃飽全家不餓。

舉個(gè)簡單的栗子:

A和B兩個(gè)人肚子都很餓,要去吃飯。A已打電話到飯店預(yù)約位置,B則打算下班后考察下再做決定。對于飯店來說,A基本上就是他的客戶了,只不過還沒見到人來,定為null(畢竟交易還沒產(chǎn)生),而對飯店來說,B是誰啊,他們根本沒聽到過這個(gè)人,為undefined

然而,概念還是念叨念叨的

從字面上理解:undefined 不明確的,不知道的,例如var a;我們聲明了一個(gè)變量但是沒有給定初始值,但是這個(gè)a代表著啥,boolean? string? number? object? function? 都有可能。而 var a = null;的話,則直接聲明了a是有的,但是它的值是空的,沒有的,如果把他們同時(shí)跟一個(gè)數(shù)值相加減,也正解釋了為啥 3+null = 0 而 3+undefined得到的結(jié)果是NaN了。

這倆貨是一堆好兄弟,相同而又不同。我們都知道JavaScript幾個(gè)基本上數(shù)據(jù)類型:

Boolean、Null Undefined String Number Symbol(ES6新增),這倆貨占據(jù)兩席位置,分量如此重,不得不說,不得不重視起來他們啊。

Undefined 其實(shí)代表的是不存在的值,Null是字面量同時(shí)也是語言中的關(guān)鍵詞,表示無法識(shí)別的對象值。他們都沒有屬性和方法,也不能給其屬性賦值。他們的布爾值都是false,說到布爾值為false的,通常包括 NaN 、 0、空字符串、Null 、Undefined 這五種常見的對象。他們之間的關(guān)系,可以這樣總結(jié):

Null  == 0           //false
Undefined == 0       //false
undefined == ""      //false
null == ""           //false
null == NaN          //false
undefined  == NaN    //false
undefined == null    //true
undefined === null   //false

null 是一個(gè)特殊的“對象”,相當(dāng)于一個(gè)空對象的預(yù)期。而undefined就是“未定義”,沒有。實(shí)際中更加推薦使用null,對他們執(zhí)行typeof分別是

typeof undefined     //undefined
typeof null          //null
相似之處

二者是不可變的,都沒有自己的屬性和方法,如果你試圖給他們增加方法或者屬性,都會(huì)產(chǎn)生類型錯(cuò)誤。各自都是孤家寡人,不用拖家?guī)Э诘?,一人吃飽全家不餓。都是“空”的東西

不同點(diǎn)

“類型”不同,undefined代表了一個(gè)意想不到的沒有的值,null是預(yù)期沒有值的代表,至于如何區(qū)分他們,下文有介紹

何種情況下會(huì)產(chǎn)生undefined呢?

當(dāng)聲明一個(gè)變量的時(shí)候,比如 var a; //undefined
訪問不存在的對象的時(shí)候 var obj = {a:1}; var c = obj.c; //undefined
當(dāng)數(shù)組中的索引不存在的時(shí)候 var arr = [1,2,3];arr[5]; //undefined
定義一個(gè)function,當(dāng)沒有返回值的時(shí)候,返回的也是 undefined

何種情況下會(huì)產(chǎn)生null呢?

當(dāng)你試圖去獲取一個(gè)不存在的DOM的時(shí)候會(huì)返回null
程序猿自己return null

說了這么多,那么問題來了,如何區(qū)分一個(gè)變量究竟是null還是undefined呢?下面為大家提供一個(gè)方法以示區(qū)分:

Object.prototype.toString.apply(null)   //  [object Null]
Object.prototype.toString.apply(undefined)  //  [object Undefined]
做一個(gè)延伸(別問我為啥去做這個(gè)操作,因?yàn)槲沂巧窠?jīng)病)

如果我分別用一個(gè)Number String 分別跟 undefined null做加減運(yùn)算,會(huì)產(chǎn)生什么操作呢?

5 + null               // 5
5 + undefined          //  NaN
"5" + null             // "5null"
"5" + undefined        // "5undefined"
"aa" + undefined       // "aaundefined"
"aa" + null            // "aanull"
"aa" * null            // NaN
"aa" * undefined       // NaN
題外話:

將我們需要判斷類型的東西通過對象的原型toString轉(zhuǎn)換為字符串,簡直就是神操作,可以狠輕松的判斷很多類型,例如

Object.prototype.toString.call({})              //  [object Object]   
Object.prototype.toString.call([])              //  [object Array]   
Object.prototype.toString.call(function d(){})  //  [object Function]   
Object.prototype.toString.call(123)             //  [object Number]
Object.prototype.toString.call("123")           //  [object String]
Object.prototype.toString.call(Symbol())        //  [object Symbol]

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/92759.html

相關(guān)文章

  • 我所知道JavaScriptundefinednull區(qū)別

    摘要:是全局對象的一個(gè)屬性,當(dāng)聲明了一個(gè)變量而未初始化時(shí),得到的就是。作為函數(shù)的參數(shù),表示該函數(shù)的參數(shù)不是對象。作為對象原型鏈的終點(diǎn)。表示缺少值,此處應(yīng)該有值,但未定義。因此和的值相等而類型不相等。數(shù)字運(yùn)算不相同這是由于約定的不同所決定的。 對于undefined和null我一直知道他們有很多區(qū)別,也知道一點(diǎn)關(guān)于他們的區(qū)別,但卻不具體系統(tǒng),因此總結(jié)了一下,主要心得如下: 我們要區(qū)分它們,首先...

    hatlonely 評(píng)論0 收藏0
  • JavaScript“數(shù)組也是對象”

    摘要:數(shù)組也是對象簡單來說,對象就是一系列屬性名值對,即某個(gè)屬性名對應(yīng)某個(gè)屬性值當(dāng)我們遍歷對象時(shí),不在對象中的屬性當(dāng)然不會(huì)被訪問到。我們知道操作符用于刪除對象中某個(gè)屬性,而中,數(shù)組就是對象的一種,數(shù)組的索引就是其屬性名,對應(yīng)的項(xiàng)就是屬性值。 先說結(jié)論吧: 數(shù)組的map方法在IE9以下是不支持的,因此需要寫一個(gè)兼容方法來實(shí)現(xiàn)此行為,在實(shí)現(xiàn)兼容的時(shí)候:必須注意:對于數(shù)組中被刪除(dele...

    Sike 評(píng)論0 收藏0
  • undefinednull區(qū)別

    摘要:目前,和基本是同義的,只有一些細(xì)微的差別。表示沒有對象,即該處不應(yīng)該有值。作為對象原型鏈的終點(diǎn)。五新增持續(xù)更新中一般是意外情況產(chǎn)生的,則是有意為對象賦值來說明這是一個(gè)空的對象的返回值是的類型是 摘自阮一峰博客,另附自己的理解分析。 大多數(shù)計(jì)算機(jī)語言,有且僅有一個(gè)表示無的值,比如,C語言的NULL,Java語言的null,Python語言的None,Ruby語言的nil。有點(diǎn)奇怪的是,J...

    defcon 評(píng)論0 收藏0
  • 【1】JavaScript 基礎(chǔ)深入——數(shù)據(jù)類型深入理解總結(jié)

    摘要:類型的實(shí)例首先要理解的含義是例子的意思,實(shí)際上是判斷是否是的一個(gè)實(shí)例。 數(shù)據(jù)類型深入理解 數(shù)據(jù)類型分類 基本(值)類型(5種) String:任意字符串 Number:任意的數(shù)字 boolean:true/false null:null undefined:undefined 對象(引用)類型(3種) Object:任意對象 Array:一種特別的對象(數(shù)值下...

    since1986 評(píng)論0 收藏0
  • JS基礎(chǔ)之undefinednull區(qū)別分析

    摘要:例如自定義局部變量作用域上的引用比較作用域上的引用比較其中,定義局部變量時(shí),其初始值會(huì)是對屬性值的引用。新定義的局部變量存在與該函數(shù)的作用域上。這就是許多前端框架為什么常常要自己定義一個(gè)局部變量的原因 在javascript開發(fā)中,開始學(xué)習(xí)js的時(shí)候時(shí)常困惑我的就是null和undefined的區(qū)別,所以很想總結(jié)下我對這兩個(gè)的理解學(xué)習(xí)過js的同學(xué)都知道: null==undefined...

    zhigoo 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

sf190404

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<