欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

背景

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

什么是undefined

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

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

什么是null

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

重頭戲來了

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

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

  • undefinednull 是特殊的:
  • undefined:是整數(shù) (-2)^30(超出整數(shù)的范圍的數(shù)字);
  • null: 是機(jī)器代碼 NULL 指針,或者說是一個對象類型標(biāo)記加上一個為 0 的引用;
  • 好了,繞了這么遠(yuǎn),該回來了,還是這個問題,為什么 typeof null 返回的是 "object",這下子應(yīng)該就很好理解了吧。
  • 因為對象的類型標(biāo)簽是 0,由于 null 代表的是 空指針,在 JavaScript 中沒有指針的概念,所以 null 32位全為 0 來表示。因此,typeof null 返回的是 "object"
  • 所以通過上面的總結(jié), null 本質(zhì)上是 0,請看以下代碼示例:
console.log(undefined + 1); // NaN
console.log(null + 1); // 1
  • null 轉(zhuǎn)化為 number 類型時,會轉(zhuǎn)換為 0。
  • undefined 轉(zhuǎn)換為 number 類型時,會轉(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ū)別的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • JS實現(xiàn)前端動態(tài)分頁碼代碼實例

    JS實現(xiàn)前端動態(tài)分頁碼代碼實例

    這篇文章主要介紹了JS實現(xiàn)前端動態(tài)分頁碼代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • 早該知道的7個JavaScript技巧

    早該知道的7個JavaScript技巧

    早該知道的7個JavaScript技巧,有了這7個JavaScript技巧,事半功倍,感興趣的小伙伴們可以參考一下
    2016-06-06
  • 淺談JS中var,let和const的區(qū)別

    淺談JS中var,let和const的區(qū)別

    這篇文章主要介紹了淺談JS中var,let和const的區(qū)別,let和const是ES6新增的關(guān)鍵字,詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-07-07
  • 跨域表單提交狀態(tài)的變相判斷代碼

    跨域表單提交狀態(tài)的變相判斷代碼

    通過表單在iframe內(nèi)向一個跨域的url提交的時候,如何判斷提交成功了呢?這個,基本上,很難,因為瀏覽器安全沙箱的限制,我們沒有辦法通過獲得iframe內(nèi)部不同域頁面的信息。
    2009-11-11
  • 微信小程序云開發(fā)如何使用云函數(shù)生成二維碼

    微信小程序云開發(fā)如何使用云函數(shù)生成二維碼

    這篇文章主要為大家詳細(xì)介紹了微信小程序云開發(fā)如何使用云函數(shù)生成二維碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • 詳解Chai.js斷言庫API中文文檔

    詳解Chai.js斷言庫API中文文檔

    這篇文章主要介紹了詳解Chai.js斷言庫API中文文檔,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • JavaScript動態(tài)提示輸入框輸入字?jǐn)?shù)的方法

    JavaScript動態(tài)提示輸入框輸入字?jǐn)?shù)的方法

    這篇文章主要介紹了JavaScript動態(tài)提示輸入框輸入字?jǐn)?shù)的方法,實例分析了javascript針對頁面元素的動態(tài)操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • js獲取RadioButtonList的Value/Text及選中值等信息實現(xiàn)代碼

    js獲取RadioButtonList的Value/Text及選中值等信息實現(xiàn)代碼

    RadioButtonList的Value,Text及選中值等信息想必有很多的朋友都想獲取到,接下來將為你介紹下如何使用js獲取,代碼很詳細(xì),感興趣的你可以參考下,或許對你有所幫助
    2013-03-03
  • 微信小程序 WXML節(jié)點信息查詢詳解

    微信小程序 WXML節(jié)點信息查詢詳解

    這篇文章主要介紹了微信小程序 WXML節(jié)點信息查詢詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • JavaScript中數(shù)組去除重復(fù)的三種方法

    JavaScript中數(shù)組去除重復(fù)的三種方法

    本文通過三種方法給大家介紹js數(shù)組去除重復(fù)的方法,實用性非常高,感興趣的朋友一起學(xué)習(xí)吧
    2016-04-04

最新評論