JavaScript?—?Null vs. Undefined
初學(xué)者往往搞不清楚null和undefined的區(qū)別,本文深入剖析null和undefined的異同。
null是啥?關(guān)于null有兩點(diǎn)需要掌握:
null是一個(gè)空值
null是被賦值來的
下面是個(gè) Demo, 我們給 a 變量賦值為 null:
let a = null; console.log(a); // nullundefined是啥?
undefined通常表示一個(gè)變量單單被聲明過,但是沒有初始化。Demo:
let b; console.log(b); // undefined
你也可以特意的給一個(gè)變量賦值為undefined,不過正常場(chǎng)景下不會(huì)這么使用。
let c = undefined; console.log(c); // undefined
還有一點(diǎn),當(dāng)訪問對(duì)象不存在的屬性時(shí),我們會(huì)得到undefined
var d = {}; console.log(d.fake); // undefinednull & undefined的相同點(diǎn)
在 JS 語言中,有6個(gè)falsy的值,其中null和undefined是六個(gè)falsy值中的兩個(gè)。
falsy 值:
false
0 (zero)
“” (empty string)
null
undefined
NaN (Not A Number)
其余所有的值則皆為truthy。
另外, JS 語言中有六個(gè)原始數(shù)據(jù)類型,null和undefined是其中兩個(gè)原始類型的值。原始數(shù)據(jù)類型:
Boolean
Null
Undefined
Number
String
Symbol
不在上述六種之內(nèi)的就都是引用類型。但是有趣的是,當(dāng)你使用typeof來校驗(yàn) null時(shí),返回的卻是object,可以簡(jiǎn)單理解為這是js 在最初引入的一個(gè) bug。
let a = null; let b; console.log(typeof a); // object console.log(typeof b); // undefinednull !== undefined
通過上面的介紹,你可能已經(jīng)隱隱約約的感覺到了null和undefined是不同的,但非常相似。所以,null !== undefined,null == undefined。
?null和undefined存在差異的實(shí)際應(yīng)用場(chǎng)景?廢話那么多,真正能用的地方,譯者就越到一個(gè),es6的默認(rèn)參數(shù)。
let logHi = (str = "hi") => { console.log(str); } /*默認(rèn)值生效*/ logHi(); // hi /*正常調(diào)用*/ logHi("bye"); // bye /*默認(rèn)值生效*/ logHi(undefined); // hi /*null 被當(dāng)成有效的值*/ logHi(null); // null
就上述代碼,大家在和我一同回憶下 es5的默認(rèn)參數(shù)的寫法
let logHi = (str) => { str = str || "hi"; console.log(str); } logHi("bye"); // bye logHi() // hi logHi(undefined); // hi logHi(null); // hiSummary
null是被賦值出來的,它用來表示空
undefined通常表示一個(gè)變量被聲明了,但是沒有被初始化
null和undefined都是falsy值
null和undefined都是原始數(shù)據(jù)類型,但JS 語言的bug導(dǎo)致typeof null = object
null !== undefined null == undefined
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/92552.html
摘要:剛學(xué)了一些的基礎(chǔ)語法,試著用一下。相關(guān)文檔基本語法配合基本使用相同點(diǎn)和都是的基本數(shù)據(jù)類型擴(kuò)展的種基本數(shù)據(jù)類型和都是值擴(kuò)展的種值空字符串不同點(diǎn)可見代表變量有值,值為空且該值是通過變量賦值獲得的代表聲明了變量,但沒有為其賦值。 剛學(xué)了一些 Markdown 的基礎(chǔ)語法,試著用一下。 相關(guān)文檔:Markdown基本語法配合基本使用 相同點(diǎn): null 和 undefined 都是js...
摘要:數(shù)據(jù)結(jié)構(gòu)前言隨著的興起將推向的一個(gè)前所未有的高度作為為建立高性能的服務(wù)端而創(chuàng)建的運(yùn)行平臺(tái)隨著時(shí)間的推移和生態(tài)鏈的完善已經(jīng)不再局部于服務(wù)端包括前端后端桌面正如在年提出的任何可以使用來編寫的應(yīng)用,最終會(huì)由編寫雖然人們大多或多或少對(duì)筆者的文章有點(diǎn) 數(shù)據(jù)結(jié)構(gòu) 前言 隨著node的興起, 將javascript推向的一個(gè)前所未有的高度, node作為為建立高性能的服務(wù)端而創(chuàng)建的js運(yùn)行平臺(tái)隨著時(shí)...
摘要:對(duì)于,除非使用箭頭函數(shù),它的回調(diào)函數(shù)的將會(huì)變化。使用測(cè)試下面的代碼,結(jié)果如下打印打印要點(diǎn)使用的規(guī)則要求所有回調(diào)函數(shù)必須使用箭頭函數(shù)。 譯者按: JS 騷操作。 原文:For vs forEach() vs for/in vs for/of in JavaScript 譯者: Fundebug 本文采用意譯,版權(quán)歸原作者所有 我們有多種方法來遍歷 JavaScript 的數(shù)組或者...
摘要:判斷一個(gè)值是否是,只能用來判斷如果兩個(gè)都是字符串,每個(gè)位置的字符都一樣,那么相等否則不相等。如果一個(gè)是字符串,一個(gè)是數(shù)值,把字符串轉(zhuǎn)換成數(shù)值再進(jìn)行比較。對(duì)象轉(zhuǎn)換成基礎(chǔ)類型,利用它的或者方法。核心內(nèi)置類,會(huì)嘗試先于例外的是,利用的是轉(zhuǎn)換。 javascript-- == vs === 高級(jí)語言層出不窮, 各個(gè)語言雖說思想一致,但仍有各自獨(dú)特的設(shè)計(jì)理念和語法, js有許多容易讓人迷惑的地方...
摘要:根據(jù)調(diào)查,自年一來,是最流行的編程語言。在一個(gè)函數(shù)體中聲明的變量和函數(shù),周圍的作用域內(nèi)無法訪問。也就是說被大括號(hào)包圍起來的區(qū)域聲明的變量外部將不可訪問。一個(gè)常見的誤解是使用聲明的變量,其值不可更改。 譯者按: 總結(jié)了大量JavaScript基本知識(shí)點(diǎn),很有用! 原文: The Definitive JavaScript Handbook for your next developer ...
閱讀 2491·2021-09-28 09:36
閱讀 3635·2021-09-22 15:41
閱讀 4456·2021-09-04 16:45
閱讀 2087·2019-08-30 15:55
閱讀 2875·2019-08-30 13:49
閱讀 852·2019-08-29 16:34
閱讀 2410·2019-08-29 12:57
閱讀 1706·2019-08-26 18:42