最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

undefined與null的區(qū)別示例詳解

 更新時(shí)間:2022年12月01日 09:44:31   作者:云夢(mèng)澤_  
這篇文章主要為大家介紹了undefined與null的區(qū)別示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

背景

  • 通過當(dāng)前文章所在專欄的上一篇的文章學(xué)習(xí)我們可以知道 undefined == null 進(jìn)行相等比較返回的結(jié)果是 true,但是具體是怎么樣的,ES5 規(guī)范好像并沒有明確的說明,這便引起了我的極度好奇,那么通過這篇這篇文章我們將揭開這個(gè)神秘的面紗。
  • 如果你還不是很熟悉 js 的類型,你可以看本專欄的往期文章,關(guān)注此專欄我想你能找到你想要的內(nèi)容。

什么是undefined

  • 全局屬性 undefined 表示原始值 undefined。它是一個(gè) JavaScript 的原始數(shù)據(jù)類型。
  • 一個(gè)沒有被賦值的變量是 undefined 類型。
  • 如果正在執(zhí)行的變量沒有分配值,則該 方法 或者 語句返回undefined`。請(qǐng)查看下圖:

  • 在上圖中,聲明變量返回的是 undefined,而 typeof 返回的是類型字符串。
  • 如果一個(gè)函數(shù)沒有返回值,那么該函數(shù)的返回結(jié)果是 undefined。
  • 如果函數(shù)定義了有參數(shù),但是沒有函數(shù)調(diào)用參數(shù),那么它也是 undefined
  • 為了證明以上的說法,請(qǐng)看下列代碼:
function foo(x, y) {
  console.log(x); // 77
  console.log(y); // undefined
}
const bar = foo(77);
console.log(bar); // undefined

什么是null

  • null 特指對(duì)象的值未設(shè)置,它是 JavaScript 基本類型之一,在布爾值運(yùn)算中被人誤是 falsy。
  • null 是一個(gè)字面量,不像 undefined,它不是全局對(duì)象的一個(gè)屬性,指示變量未指向任何對(duì)象,把 null 作為尚未創(chuàng)建的對(duì)象也許更好理解。從邏輯上講,null 表示一個(gè)空對(duì)象指針,這也是給 typeof 傳一個(gè) null 會(huì)返回 "object"的原因
  • 在獲取 DOM 元素時(shí),如果沒有獲取到,返回的是 null,原型鏈的最頂端也是 null,請(qǐng)看代碼:
console.log(document.querySelector("moment")); // null
function foo() {}
console.log(foo.__proto__.__proto__.__proto__); // null
console.log(Object.__proto__.__proto__.__proto__); // null

重頭戲來了

  • typeof 中分別對(duì) undefinednull進(jìn)行類型檢查,請(qǐng)看以下代碼:
console.log(typeof undefined); // undefined
console.log(typeof null); // object
  • typeof undefined 輸出 "undefined"估計(jì)已經(jīng)家喻戶曉了吧,但是為什么 typeof null 輸出的 "object",通過查閱資料得知,這是一個(gè)歷史遺留問題,曾經(jīng)有有一個(gè) ECMAScript 的修復(fù)提案,但被拒絕了,這個(gè)似乎無法修復(fù),因?yàn)樗鼤?huì)破壞現(xiàn)有代碼(此項(xiàng)目依靠該bug運(yùn)行...)。
  • JavaScript 的第一個(gè)版本中,值存儲(chǔ)在32位的單元中(相當(dāng)于一條機(jī)器碼),它由一個(gè)小型類型標(biāo)記(1-3位)和值的實(shí)際數(shù)據(jù)組成。類型標(biāo)記存儲(chǔ)在單元的低位,其中:
  • 000: 對(duì)象,數(shù)據(jù)是對(duì)象的引用;
  • 1: 整型,數(shù)據(jù)是31位帶符號(hào)的整數(shù);
  • 010: 雙精度,數(shù)據(jù)是雙精度浮點(diǎn)數(shù)的引用;
  • 100:字符串,數(shù)據(jù)是字符串;
  • 110: 布爾值,數(shù)據(jù)是布爾值;

在 V8 引擎中,會(huì)把 JavaScript 熱點(diǎn)代碼編譯成機(jī)器碼,它是電腦CPU直接讀取運(yùn)行的機(jī)器碼,運(yùn)行速度最快,但是非?;逎y懂,同時(shí)也比較難編寫;機(jī)器碼就是計(jì)算機(jī)可以直接執(zhí)行,并且執(zhí)行速度最快的代碼;

  • undefinednull 是特殊的:
  • undefined:是整數(shù) (-2)^30(超出整數(shù)的范圍的數(shù)字);
  • null: 是機(jī)器代碼 NULL 指針,或者說是一個(gè)對(duì)象類型標(biāo)記加上一個(gè)為 0 的引用;
  • 好了,繞了這么遠(yuǎn),該回來了,還是這個(gè)問題,為什么 typeof null 返回的是 "object",這下子應(yīng)該就很好理解了吧。
  • 因?yàn)閷?duì)象的類型標(biāo)簽是 0,由于 null 代表的是 空指針,在 JavaScript 中沒有指針的概念,所以 null 32位全為 0 來表示。因此,typeof null 返回的是 "object"。
  • 所以通過上面的總結(jié), null 本質(zhì)上是 0,請(qǐng)看以下代碼示例:
console.log(undefined + 1); // NaN
console.log(null + 1); // 1
  • null 轉(zhuǎn)化為 number 類型時(shí),會(huì)轉(zhuǎn)換為 0。
  • undefined 轉(zhuǎn)換為 number 類型時(shí),會(huì)轉(zhuǎn)換為 NaN。
  • 那么使用上還有什么樣的區(qū)別呢?繼續(xù)上代碼:
function foo(x = 77, y = "moment") {
  console.log(x); // 77
  console.log(y); // null
}
foo(undefined, null);
const [x = 1, y = 2] = [undefined, null];
console.log(x); // 1
console.log(y); // null

神奇吧,刺激吧,但是結(jié)束了??????

參考文章

以上就是undefined與null的區(qū)別示例詳解的詳細(xì)內(nèi)容,更多關(guān)于undefined null區(qū)別的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 微信小程序授權(quán)登錄的最新實(shí)現(xiàn)方案詳解(2023年)

    微信小程序授權(quán)登錄的最新實(shí)現(xiàn)方案詳解(2023年)

    最近由于公司需要研究了一下微信小程序的開發(fā),特此記錄一下小程序登錄授權(quán)的流程,便于自己理解,也希望對(duì)他人有多幫助,下面這篇文章主要給大家介紹了關(guān)于微信小程序授權(quán)登錄的最新實(shí)現(xiàn)方案的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • JavaScript通如何過RGraph實(shí)現(xiàn)動(dòng)態(tài)儀表盤

    JavaScript通如何過RGraph實(shí)現(xiàn)動(dòng)態(tài)儀表盤

    這篇文章主要介紹了JavaScript通如何過RGraph實(shí)現(xiàn)動(dòng)態(tài)儀表盤,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • JS 對(duì)java返回的json格式的數(shù)據(jù)處理方法

    JS 對(duì)java返回的json格式的數(shù)據(jù)處理方法

    下面小編就為大家?guī)硪黄狫S 對(duì)java返回的json格式的數(shù)據(jù)處理方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-12-12
  • 前端根據(jù)鏈接生成二維碼的方案及相關(guān)常用API

    前端根據(jù)鏈接生成二維碼的方案及相關(guān)常用API

    這篇文章主要介紹了qrcode插件的使用方法,包括ES6/ES7示例、常用API及Vue示例,同時(shí)還討論了二維碼的優(yōu)點(diǎn)和缺點(diǎn),文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-01-01
  • javascript 實(shí)現(xiàn)子父窗體互相傳值的簡(jiǎn)單實(shí)例

    javascript 實(shí)現(xiàn)子父窗體互相傳值的簡(jiǎn)單實(shí)例

    本篇文章主要是對(duì)javascript 實(shí)現(xiàn)子父窗體互相傳值的簡(jiǎn)單實(shí)例進(jìn)行了介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助
    2014-02-02
  • 使用threejs實(shí)現(xiàn)滾動(dòng)效果的示例代碼

    使用threejs實(shí)現(xiàn)滾動(dòng)效果的示例代碼

    某一天我在刷抖音時(shí),看到一個(gè)UI設(shè)計(jì)師分享了一個(gè)好看的網(wǎng)頁滾動(dòng)動(dòng)效設(shè)計(jì),那種飄逸流暢的動(dòng)畫效果立刻抓住了我的眼球,我腦海里立刻開始想象用代碼如何實(shí)現(xiàn)這個(gè)效果,所以本文給大家分享了如何使用threejs實(shí)現(xiàn)滾動(dòng)效果,感興趣的朋友可以參考下
    2024-01-01
  • window.onload追加函數(shù)使用示例

    window.onload追加函數(shù)使用示例

    這篇文章主要介紹了window.onload追加函數(shù)使用示例,需要的朋友可以參考下
    2014-03-03
  • 用JavaScript操作WinRar

    用JavaScript操作WinRar

    Blog的插入HTML功能有誤。 原來在blueidea.com上看到了用ASP執(zhí)行解壓縮動(dòng)作的文章,一直沒有去用心看,前日,趁老大不在,爽了一把,把它改成了用JavaScript操作的了。
    2008-04-04
  • 支持IE和FF的div+css選項(xiàng)卡

    支持IE和FF的div+css選項(xiàng)卡

    支持IE和FF的div+css選項(xiàng)卡...
    2006-11-11
  • JS判斷點(diǎn)是否在線段上的代碼

    JS判斷點(diǎn)是否在線段上的代碼

    這篇文章主要介紹了JS判斷點(diǎn)是否在線段上的相關(guān)資料,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-11-11

最新評(píng)論

陆良县| 漯河市| 京山县| 建湖县| 吴江市| 元谋县| 蒙山县| 方正县| 和田县| 长春市| 丹江口市| 轮台县| 高邮市| 南召县| 通海县| 锦州市| 泸水县| 通榆县| 乌兰察布市| 宁武县| 临朐县| 云和县| 故城县| 建瓯市| 八宿县| 灵宝市| 陆丰市| 南丹县| 班戈县| 陇南市| 淮滨县| 横峰县| 朝阳县| 荃湾区| 和硕县| 衢州市| 和政县| 佛学| 高要市| 民权县| 西宁市|