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

ECMAScript?的?6?種簡單數(shù)據(jù)類型

 更新時間:2022年06月04日 09:55:34   作者:??Shrimpsss????  
這篇文章主要介紹了ECMAScript的?6?種簡單數(shù)據(jù)類型,ECMAScript的數(shù)據(jù)類型很靈活,一種數(shù)據(jù)類型可以當作多種數(shù)據(jù)類型來使用,具體使用詳情文章詳細介紹需要的小伙伴可以參考一下

前言

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

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

typeof 操作符

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

類型檢測

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

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

使用說明

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

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

注意:因為 typeof 是一個操作符而不是函數(shù),所以不需要參數(shù)(但可以使用參數(shù))

小知識

調用typeof null 返回的是 "object"。這是因為特殊值 null 被認為是一個對空對象的引用

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

Undefined 類型

Undefined 類型只有一個值,就是特殊值 undefined

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

練習場景

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

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

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

我們再來看看下面這個例子:

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

這是個不必要的預定義,因為默認情況下任何未經初始化的變量都會取得 undefined 值。

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

undefined 與 not defined 的區(qū)別

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

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

在上面的例子中,第一個 console.log 因為變量message未定義值,即為"undefined";而第二個console.log 要輸出一個未聲明的變量 age 的值,因此會導致報錯。

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

使用 typeof 檢測 undefined

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

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

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

因為嚴格來講這兩個變量存在根本性差異,但它們都無法執(zhí)行實際操作,所以都返回 undefined

注意: 即使未初始化的變量會被自動賦予 undefined 值,但仍然建議在聲明變量的同時進行初始化。這樣當 typeof 返回 "undefined"時,你就會知道那是因為給定的變量尚未聲明,而不是聲明了但未初始化。

小知識

undefined是一個假值。

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

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

Null 類型

null 值表示一個空對象指針

練習場景

因為它的值表示空對象指針,所以用typeof 傳一個 null 會返回 “object”,如下:

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

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

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

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

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

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

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

小知識

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

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

還有一點:null 也是個假值,檢測方法與上述 undefined 一致

Boolean 類型

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

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

練習場景

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

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

?const a = true; // ?
?const b = false; // ?
?const c = True; // 報錯:True is not defined

類型轉換

雖然布爾值只有兩個,但所有其他 ECMAScript 類型的值都有相應布爾值的等價形式。

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

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

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

轉換表

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

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

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

這個表非常重要,基本布爾轉換都得依靠這個表

if 中的轉換

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

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

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

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

總結

  • typeof 操作符用于確定任意變量的數(shù)據(jù)類型
  • undefined 屬性表示變量沒有被賦值,或者根本沒有被聲明
  • undefined字面值主要用于比較
  • null 值表示一個空對象指針
  • null用來填充一個要保存對象,而當時又沒有那個對象可保存的變量
  • Boolean 兩個字面值:true 和 false,泛指正確與錯誤;
  • Boolean()轉型函數(shù) 可以在任意類型的數(shù)據(jù)上調用,而且始終返回一個布爾值

到此這篇關于ECMAScript 的 6 種簡單數(shù)據(jù)類型的文章就介紹到這了,更多相關ECMAScript 數(shù)據(jù)類型內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論

蚌埠市| 安仁县| 仁寿县| 宁都县| 石楼县| 尼勒克县| 南郑县| 邹平县| 元朗区| 永城市| 青州市| 兴城市| 沙洋县| 乐清市| 肇庆市| 安阳县| 新竹市| 平陆县| 临江市| 克东县| 松原市| 诸暨市| 辽阳市| 辽宁省| 丰台区| 塔城市| 三原县| 文水县| 扬州市| 黔东| 方城县| 盘山县| 札达县| 文成县| 陈巴尔虎旗| 阳东县| 石棉县| 澄江县| 通渭县| 肃南| 安阳县|