成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

JavaScript·隨記 Null vs. Undefined

Tychio / 3231人閱讀

摘要:剛學(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):

nullundefined 都是js的基本數(shù)據(jù)類型
擴(kuò)展:JS的6種基本數(shù)據(jù)類型

Boolean

String

Number

Symbol

Null

undefined

nullundefined 都是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īng)用場(chǎng)景:

===(嚴(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

相關(guān)文章

  • JavaScript·隨記 深拷貝 vs. 淺拷貝

    摘要:而在這個(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í) 在討...

    RyanQ 評(píng)論0 收藏0
  • 《高性能javascript隨記 - Data Access

    摘要:內(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以...

    fai1017 評(píng)論0 收藏0
  • 《高性能javascript隨記 - Loading and Excecution

    摘要:此過(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)用的外部腳本,瀏覽器首先下載外...

    DevTTL 評(píng)論0 收藏0
  • JavaScript?—?Null vs. Undefined

    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 ...

    tanglijun 評(píng)論0 收藏0
  • javascript數(shù)據(jù)結(jié)構(gòu)與算法 --- 棧 vs 隊(duì)列 vs 鏈表 vs 二叉樹 vs

    摘要:數(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í)...

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

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

0條評(píng)論

閱讀需要支付1元查看
<