溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

ECMAScript的數(shù)據(jù)類型有哪些及怎么使用

發(fā)布時(shí)間:2022-06-06 09:50:08 來源:億速云 閱讀:142 作者:zzz 欄目:開發(fā)技術(shù)

這篇“ECMAScript的數(shù)據(jù)類型有哪些及怎么使用”文章的知識點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“ECMAScript的數(shù)據(jù)類型有哪些及怎么使用”文章吧。

    前言

    本文為JSRedBook數(shù)據(jù)類型, 主要講述 ECMAScript 的 6 種簡單數(shù)據(jù)類型(原始類型)中的其中三種:UndefinedNull、Boolean以及常用的操作符。

    ECMAScript 的數(shù)據(jù)類型很靈活,一種數(shù)據(jù)類型可以當(dāng)作多種數(shù)據(jù)類型來使用

    typeof 操作符

    typeof操作符用于確定(檢測)任意變量的數(shù)據(jù)類型

    類型檢測

    對一個(gè)值使用 typeof 操作符會返回下列字符串之一:

    數(shù)據(jù)類型檢測結(jié)果
    undefined表示值為 未定義
    boolean表示值為 布爾值
    string表示值為 字符串
    number表示值為 數(shù)值
    symbol表示值為 符號
    function表示值為 函數(shù)
    object表示值為 對象 或 null

    使用說明

    下面是使用 typeof 操作符的例子:

     const message = "Hello"
     console.log(typeof(msssage)) // "string"
     console.log(typeof 99 ) // "number"

    注意:因?yàn)?nbsp;typeof 是一個(gè)操作符而不是函數(shù),所以不需要參數(shù)(但可以使用參數(shù))

    小知識

    調(diào)用typeof null 返回的是 "object"。這是因?yàn)樘厥庵?nbsp;null 被認(rèn)為是一個(gè)對空對象的引用

    注意: 嚴(yán)格來講,函數(shù)在 ECMAScript 中被認(rèn)為是對象,并不代表一種數(shù)據(jù)類型;但函數(shù)也有自己特殊的屬性,所以就有必要通過 typeof 操作符來區(qū)分函數(shù)和其他對象。

    Undefined 類型

    Undefined 類型只有一個(gè)值,就是特殊值 undefined

    增加這個(gè)特殊值的目的就是為了正式明確空對象指針(null)和未初始化變量的區(qū)別

    練習(xí)場景

    當(dāng)使用 var 或 let 聲明了變量但沒有初始化時(shí),就相當(dāng)于給變量賦予了 undefined 值,如下:

     let message; 
     console.log(message == undefined); // true

    變量 message 在聲明的時(shí)候并未初始化,因此比較它和 undefined 的字面值時(shí),兩者是相等的

    我們再來看看下面這個(gè)例子:

     let message = undefined; 
     console.log(message == undefined); // true

    這是個(gè)不必要的預(yù)定義,因?yàn)槟J(rèn)情況下任何未經(jīng)初始化的變量都會取得 undefined 值。

    注意: 一般來說,永遠(yuǎn)不用顯式地給某個(gè)變量設(shè)置 undefined 值,字面值 undefined主要用于比較,而且在 ECMA-262 第 3 版之前是不存在的。

    undefined 與 not defined 的區(qū)別

    包含 undefined 值的變量跟未定義變量是有區(qū)別的,如下:

     let message;   // 這個(gè)變量被聲明了,只是值為 undefined 
     // let age;  確保沒有聲明過這個(gè)變量
     
     console.log(message); // "undefined" 
     console.log(age); // 報(bào)錯(cuò);

    在上面的例子中,第一個(gè) console.log 因?yàn)樽兞縨essage未定義值,即為"undefined";而第二個(gè)console.log 要輸出一個(gè)未聲明的變量 age 的值,因此會導(dǎo)致報(bào)錯(cuò)。

    注意: 對未聲明的變量,只能執(zhí)行一個(gè)有用的操作就是對它調(diào)用 typeof。(對未聲明的變量調(diào)用 delete 也不會報(bào)錯(cuò),但這個(gè)操作沒什么用,實(shí)際上在嚴(yán)格模式下會拋出錯(cuò)誤)

    使用 typeof 檢測 undefined

    在對未初始化的變量調(diào)用 typeof 時(shí),返回的結(jié)果是"undefined",但對未聲明的變量調(diào)用它時(shí),返回的結(jié)果還是"undefined",這就有點(diǎn)讓人看不懂了。比如下面的例子:

     let message; //這個(gè)變量被聲明了,只是值為 undefined 
     // 確保沒有聲明過這個(gè)變量
     
     // let age 
     console.log(typeof message); // "undefined"
     console.log(typeof age); // "undefined"

    這就奇怪了(⊙?⊙),為什么無論是聲明還是未聲明,typeof 返回的都是字符串"undefined"?。

    因?yàn)閲?yán)格來講這兩個(gè)變量存在根本性差異,但它們都無法執(zhí)行實(shí)際操作,所以都返回 undefined。

    注意: 即使未初始化的變量會被自動賦予 undefined 值,但仍然建議在聲明變量的同時(shí)進(jìn)行初始化。這樣當(dāng) typeof 返回 "undefined"時(shí),你就會知道那是因?yàn)榻o定的變量尚未聲明,而不是聲明了但未初始化。

    小知識

    undefined是一個(gè)假值。

    但是也有很多其他的值可能也是假值,所以一定要明確自己想檢測的就是 undefined 這個(gè)字面值,而不僅僅是假值,如下:

     let message; // 這個(gè)變量被聲明了,只是值為 undefined 
     
     if (message) { 
      // 這個(gè)塊不會執(zhí)行
     } 
     
     if (!message) { 
      // 這個(gè)塊會執(zhí)行
     } 
     
     if (age) { // age 沒有聲明 
      // 這里會報(bào)錯(cuò)
     }

    Null 類型

    null 值表示一個(gè)空對象指針

    練習(xí)場景

    因?yàn)樗闹当硎究諏ο笾羔?,所以?code>typeof 傳一個(gè) null 會返回 “object”,如下:

     const test = null;
     console.log(typeof test);   // "object"

    建議: 在定義將來要保存對象值的變量時(shí),建議使用 null 來初始化,不要使用其他值;

    這樣只要檢查這個(gè)變量的值是不是 null 就可以知道這個(gè)變量是否在后來被重新賦予了一個(gè)對象的引用,如下:

     if (car != null) { 
      // car 是一個(gè)對象的引用
     }

    注意: 用等于操作符(==)比較 null 和 undefined 始終返回 true

    因?yàn)?nbsp;undefined 值是由 null 值派生而來的,因此 ECMA-262 將它們定義為表面上相等,如下:

     console.log(null == undefined); // true

    小知識

    即使 null 和 undefined 有關(guān)系,它們的用途也是完全不一樣的。

    如前所述,永遠(yuǎn)不必顯式地將變量值設(shè)置為 undefined,但 null 不是這樣的;任何時(shí)候,只要變量要保存對象,而當(dāng)時(shí)又沒有那個(gè)對象可保存,就要用 null 來填充該變量;這樣就可以保持 null 是空對象指針的語義,并進(jìn)一步將其與 undefined 區(qū)分開來。

    還有一點(diǎn):null 也是個(gè)假值,檢測方法與上述 undefined 一致

    Boolean 類型

    Boolean(布爾值)類型是 ECMAScript 中使用最頻繁的類型之一,有兩個(gè)字面值:true 和 false。

    • 這兩個(gè)布爾值不同于數(shù)值,因此 true 不等于 1,false 不等于 0。

    練習(xí)場景

    布爾值字面量 true 和 false 是區(qū)分大小寫的

    因此 True 和 False(及其他大小混寫形式)是有效的標(biāo)識符,但不是布爾值,如下:

     const a = true; // ?
     const b = false; // ?
     const c = True; // 報(bào)錯(cuò):True is not defined

    類型轉(zhuǎn)換

    雖然布爾值只有兩個(gè),但所有其他 ECMAScript 類型的值都有相應(yīng)布爾值的等價(jià)形式

    要將一個(gè)其他類型的值轉(zhuǎn)換為布爾值,可以調(diào)用特定的 Boolean()轉(zhuǎn)型函數(shù),如下:

     const message = "Hello juejin";
     const remessage = Boolean(message); // true

    在上述例子中,字符串 message 會被轉(zhuǎn)換為布爾值并保存在變量 remessage 中。

    轉(zhuǎn)換表

    Boolean()轉(zhuǎn)型函數(shù) 可以在任意類型的數(shù)據(jù)上調(diào)用,而且始終返回一個(gè)布爾值;什么值能轉(zhuǎn)換為 true或 false 的規(guī)則取決于數(shù)據(jù)類型和實(shí)際的值。

    下表總結(jié)了不同類型與布爾值之間的轉(zhuǎn)換規(guī)則:

    數(shù)據(jù)類型轉(zhuǎn)換為 true 的值轉(zhuǎn)換為 false 的值
    Booleantruefalse
    String非空字符串""(空字符串)
    Number非零數(shù)值(包括無窮值)0,NaN
    Object任意對象null
    UndefinedN/A(不存在)undefined

    這個(gè)表非常重要,基本布爾轉(zhuǎn)換都得依靠這個(gè)表

    if 中的轉(zhuǎn)換

    像 if 等流控制語句會自動執(zhí)行其他類型值到布爾值的轉(zhuǎn)換,如下:

     const test = "Hey";
     if (test) { 
         console.log("Value is True");
     }
     // "Value is True"

    上面的例子中,字符串 test 會被自動轉(zhuǎn)換為等價(jià)的布爾值 true,因此成功輸出 "Value is True"

    由于存在這種自動轉(zhuǎn)換,理解控制流語句中使用的是什么變量就非常重要,錯(cuò)誤地使用對象而不是布爾值會明顯改變應(yīng)用程序的執(zhí)行流。

    以上就是關(guān)于“ECMAScript的數(shù)據(jù)類型有哪些及怎么使用”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道。

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI