摘要:剛學(xué)了一些的基礎(chǔ)語(yǔ)法,試著用一下。相關(guān)文檔基本語(yǔ)法配合基本使用相同點(diǎn)和都是的基本數(shù)據(jù)類型擴(kuò)展的種基本數(shù)據(jù)類型和都是值擴(kuò)展的種值空字符串不同點(diǎn)可見代表變量有值,值為空且該值是通過(guò)變量賦值獲得的代表聲明了變量,但沒(méi)有為其賦值。
剛學(xué)了一些 Markdown 的基礎(chǔ)語(yǔ)法,試著用一下。
相關(guān)文檔:Markdown基本語(yǔ)法配合基本使用相同點(diǎn):
null 和 undefined 都是js的基本數(shù)據(jù)類型
擴(kuò)展:JS的6種基本數(shù)據(jù)類型
Boolean
String
Number
Symbol
Null
undefined
null 和 undefined 都是falsy值
擴(kuò)展:JS的6種falsy值
0
false
"" (空字符串)
NaN (Not a Number)
undefined
null
不同點(diǎn):let i = null; console.log(i); // null
let j; console.log(j); // undefined
可見:
null 代表變量有值,值為 空 , 且該值是通過(guò) 變量賦值 獲得的;
undefined 代表聲明了變量,但沒(méi)有為其賦值。
綜上:
undefined == null; // true undefined !== null; // true
使用 typeof 驗(yàn)證一下:
typeof undefined; // "undefined" typeof null; // "object" typeof NaN; // "number"
Emm...,有點(diǎn)懵逼,確實(shí)驗(yàn)證了undefined !== null,不過(guò)...
null的類型是object?! ( 你不是js的基本數(shù)據(jù)類型嗎? )
NaN的類型是number?! ( 你全稱不是叫 “Not a Number” 嗎? )
事實(shí)上就是這么皮,而且你還會(huì)發(fā)現(xiàn):
!!NaN === false; // true NaN == false; // false NaN == 0; // false
甚至:
NaN == NaN; // false
NaN的特性就是如此:
NaN是number類型;
NaN不等于任何值;
無(wú)效運(yùn)算時(shí)會(huì)產(chǎn)生NaN,比如parseInt("abc")
可用isNaN()判斷一個(gè)值是否是NaN
!!是個(gè)很好用的“運(yùn)算符”,它的用途是判斷任意值在做if條件判斷時(shí)的邏輯值(而非參與邏輯運(yùn)算時(shí)的邏輯值,下文會(huì)提到),比如:
!! "" // false "" == false // true !! 0 // false 0 == false // true
但是,千萬(wàn)不要覺得!!運(yùn)算結(jié)果為false,== false就成立,比如:
!! undefined; // false undefined == false; // false !! undefined === false; // true !! null; // false null == false; // false !! null === false; // true !! NaN; // false NaN == false; // false !! NaN === false; // true
另一點(diǎn)需要注意的是,它不做為參與邏輯運(yùn)算時(shí)的邏輯值,比如:
!! undefined; // false /* 結(jié)果是undefined,而不是false */ undefined && "a"; // undefined false && "a"; // false
但愿你還沒(méi)看蒙。。至于為什么typeof(null) === "object"
Emm。。跑題了,我們接著說(shuō) Null vs. Undefined
===(嚴(yán)格等于) 和 ==(等于) 分別在何時(shí)使用:
我們都知道在做邏輯判斷時(shí),== 會(huì)強(qiáng)制轉(zhuǎn)換用于比較的兩個(gè)值的類型;而在實(shí)際開發(fā)中,以下情況用 == ,其他時(shí)候都用 === 即可
if (obj.a == null) { // 這里相當(dāng)于 obj.a === null || obj.a === undefined; // 這也是jquery源碼中推薦的寫法 }
ES6函數(shù)默認(rèn)參數(shù)的實(shí)現(xiàn):
結(jié)合上文,null 是有值的,且值為 空,可通過(guò)賦值賦給變量
let logHi = (param = "hello" ) => { console.log(param); }; /* 默認(rèn)值生效 */ logHi(); // "hello" /* 賦值調(diào)用 */ logHi("world"); // "world" /* undefined時(shí),默認(rèn)值生效 */ logHi(undefined); // "hello" /* null作為值,賦值調(diào)用 */ logHi(null); // null /* NaN作為值,賦值調(diào)用 */ logHi(NaN); // NaN
倘若函數(shù)這樣寫:
let consoleHi = (param) => { param = param || "hello"; console.log(param); }; /* 默認(rèn)值生效 */ consoleHi(); // "hello" /* 賦值調(diào)用 */ consoleHi("world"); // "world" /* undefined時(shí),默認(rèn)值生效 */ consoleHi(undefined); // "hello" /* null作為值為falsy */ consoleHi(null); // "hello" /* NaN作為值為falsy */ consoleHi(NaN); // "hello"
參考文獻(xiàn):JavaScript?—?Null vs. Undefined
題外話:不免想起一篇文章,雖然聯(lián)系不大
趣文:編程其實(shí)是文科
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/103981.html
摘要:而在這個(gè)運(yùn)算符的相關(guān)用例中,往往會(huì)涉及到其他知識(shí)點(diǎn),深拷貝和淺拷貝就是其中之一。即對(duì)象的淺拷貝會(huì)對(duì)主對(duì)象的值進(jìn)行拷貝,而該值有可能是一個(gè)指針,指向內(nèi)存中的同一個(gè)對(duì)象。,可以看到深拷貝和淺拷貝是對(duì)復(fù)制引用類型變量而言的。 在ES6的系列文章中,基本都會(huì)提到Spread——擴(kuò)展運(yùn)算符(...)。而在這個(gè)運(yùn)算符的相關(guān)用例中,往往會(huì)涉及到其他知識(shí)點(diǎn),深拷貝和淺拷貝就是其中之一。 背景知識(shí) 在討...
摘要:內(nèi)部屬性包含一個(gè)函數(shù)被創(chuàng)建的作用域中的對(duì)象的集合,此集合被稱為函數(shù)的作用域鏈。當(dāng)作用域鏈銷毀時(shí),激活對(duì)象一同被銷毀。下圖展示了函數(shù)運(yùn)行期上下文的作用域和閉包由于閉包的屬性包含與運(yùn)行期上下文作用域鏈相同的對(duì)象引用,會(huì)產(chǎn)生副作用。 javascript按照數(shù)據(jù)存儲(chǔ)位置的不同可分為以下四類: 直接量(字符串、數(shù)字、布爾型、Object、Array、Function、正則表達(dá)式、NULL以...
摘要:此過(guò)程中,頁(yè)面的解析與用戶的交互都是阻塞的。非阻塞腳本延時(shí)腳本可以給標(biāo)簽添加一個(gè)屬性,這個(gè)屬性表明元素中的腳本不打算修改,因此代碼可以稍后執(zhí)行。此技術(shù)的重點(diǎn)在于無(wú)論在何處啟動(dòng)下載,腳本的下載和運(yùn)行都不會(huì)阻塞頁(yè)面的處理過(guò)程。 當(dāng)瀏覽器遇到標(biāo)簽時(shí),頁(yè)面的加載、介些都會(huì)停下來(lái),運(yùn)行此javascript代碼,然后再繼續(xù)加載。這種事情同樣會(huì)發(fā)生在那些以src屬性調(diào)用的外部腳本,瀏覽器首先下載外...
JavaScript?—?Null vs. Undefined 初學(xué)者往往搞不清楚null和undefined的區(qū)別,本文深入剖析null和undefined的異同。 null是啥? 關(guān)于null有兩點(diǎn)需要掌握: null是一個(gè)空值 null是被賦值來(lái)的 下面是個(gè) Demo, 我們給 a 變量賦值為 null: let a = null; console.log(a); // null ...
摘要:數(shù)據(jù)結(jié)構(gòu)前言隨著的興起將推向的一個(gè)前所未有的高度作為為建立高性能的服務(wù)端而創(chuàng)建的運(yùn)行平臺(tái)隨著時(shí)間的推移和生態(tài)鏈的完善已經(jīng)不再局部于服務(wù)端包括前端后端桌面正如在年提出的任何可以使用來(lái)編寫的應(yīng)用,最終會(huì)由編寫雖然人們大多或多或少對(duì)筆者的文章有點(diǎn) 數(shù)據(jù)結(jié)構(gòu) 前言 隨著node的興起, 將javascript推向的一個(gè)前所未有的高度, node作為為建立高性能的服務(wù)端而創(chuàng)建的js運(yùn)行平臺(tái)隨著時(shí)...
閱讀 1543·2019-08-30 15:44
閱讀 2003·2019-08-30 14:07
閱讀 2955·2019-08-30 13:56
閱讀 2428·2019-08-29 17:06
閱讀 1404·2019-08-29 14:13
閱讀 2139·2019-08-29 11:28
閱讀 3303·2019-08-26 13:56
閱讀 2016·2019-08-26 12:11