摘要:他們的布爾值都是,說到布爾值為的,通常包括空字符串這五種常見的對象。各自都是孤家寡人,不用拖家?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
當(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
摘要:是全局對象的一個(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ū)分它們,首先...
摘要:數(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...
摘要:目前,和基本是同義的,只有一些細(xì)微的差別。表示沒有對象,即該處不應(yīng)該有值。作為對象原型鏈的終點(diǎn)。五新增持續(xù)更新中一般是意外情況產(chǎn)生的,則是有意為對象賦值來說明這是一個(gè)空的對象的返回值是的類型是 摘自阮一峰博客,另附自己的理解分析。 大多數(shù)計(jì)算機(jī)語言,有且僅有一個(gè)表示無的值,比如,C語言的NULL,Java語言的null,Python語言的None,Ruby語言的nil。有點(diǎn)奇怪的是,J...
摘要:類型的實(shí)例首先要理解的含義是例子的意思,實(shí)際上是判斷是否是的一個(gè)實(shí)例。 數(shù)據(jù)類型深入理解 數(shù)據(jù)類型分類 基本(值)類型(5種) String:任意字符串 Number:任意的數(shù)字 boolean:true/false null:null undefined:undefined 對象(引用)類型(3種) Object:任意對象 Array:一種特別的對象(數(shù)值下...
摘要:例如自定義局部變量作用域上的引用比較作用域上的引用比較其中,定義局部變量時(shí),其初始值會(huì)是對屬性值的引用。新定義的局部變量存在與該函數(shù)的作用域上。這就是許多前端框架為什么常常要自己定義一個(gè)局部變量的原因 在javascript開發(fā)中,開始學(xué)習(xí)js的時(shí)候時(shí)常困惑我的就是null和undefined的區(qū)別,所以很想總結(jié)下我對這兩個(gè)的理解學(xué)習(xí)過js的同學(xué)都知道: null==undefined...
閱讀 2046·2019-08-30 15:52
閱讀 3014·2019-08-29 16:09
閱讀 1348·2019-08-28 18:30
閱讀 2478·2019-08-26 12:24
閱讀 1132·2019-08-26 12:12
閱讀 2299·2019-08-26 10:45
閱讀 601·2019-08-23 17:52
閱讀 890·2019-08-23 16:03