官术网_书友最值得收藏!

第1章 JavaScript重點(diǎn)概念

1.1 JavaScript的基本數(shù)據(jù)類型介紹

所有的編程語(yǔ)言都存在數(shù)據(jù)類型的概念。

在JavaScript中,數(shù)據(jù)類型可以分為基本數(shù)據(jù)類型和引用數(shù)據(jù)類型,其中基本數(shù)據(jù)類型包括Undefined、Null、Boolean、Number、String 5種,在ES6中新增了一種新的基本數(shù)據(jù)類型Symbol,這個(gè)會(huì)在第7章中講到;引用數(shù)據(jù)類型含有Object、Function、Array、Date等類型,這些將會(huì)在第2章和第3章重點(diǎn)講解。

接下來(lái)會(huì)詳細(xì)講解JavaScript中的基本數(shù)據(jù)類型。

1. Undefined類型

Undefined類型只有一個(gè)唯一的字面值undefined,表示的是一個(gè)變量不存在。

下面是4種常見(jiàn)的出現(xiàn)undefined的場(chǎng)景。

① 使用只聲明而未初始化的變量時(shí),會(huì)返回“undefined”。


var a;
console.log(a);  // unde?ned

② 獲取一個(gè)對(duì)象的某個(gè)不存在的屬性(自身屬性和原型鏈繼承屬性)時(shí),會(huì)返回“undefined”。


var obj = {
   name: 'kingx'
};
console.log(obj.address);  // unde?ned

③ 函數(shù)沒(méi)有明確的返回值時(shí),卻在其他地方使用了返回值,會(huì)返回“undefined”。


function foo() {}
console.log(foo()); // unde?ned

④ 函數(shù)定義時(shí)使用了多個(gè)形式參數(shù)(后文簡(jiǎn)稱為形參),而在調(diào)用時(shí)傳遞的參數(shù)的數(shù)量少于形參數(shù)量,那么未匹配上的參數(shù)就為“undefined”。


function foo(param1, param2, param3) {
   console.log(param3);
}
foo(1, 2);  // unde?ned

2. Null類型

Null類型只有一個(gè)唯一的字面值null,表示一個(gè)空指針對(duì)象,這也是在使用typeof運(yùn)算符檢測(cè)null值時(shí)會(huì)返回“object”的原因。

下面是3種常見(jiàn)的出現(xiàn)null的場(chǎng)景。

① 一般情況下,如果聲明的變量是為了以后保存某個(gè)值,則應(yīng)該在聲明時(shí)就將其賦值為“null”。


var returnObj = null;

function foo() {
   return {
      name: 'kingx'
   };
}

returnObj = foo();

② JavaScript在獲取DOM元素時(shí),如果沒(méi)有獲取到指定的元素對(duì)象,就會(huì)返回“null”。


document.querySelector('#id');  // null

③ 在使用正則表達(dá)式進(jìn)行捕獲時(shí),如果沒(méi)有捕獲結(jié)果,就會(huì)返回“null”。


'test'.match(/a/);  // null

3. Undefined和Null兩種類型的異同

Undefined和Null雖然是兩種不同的基本數(shù)據(jù)類型,存在一些不同的特性,但是在某些表現(xiàn)上存在著相同之處,這里就總結(jié)了Undefined和Null的相同點(diǎn)和不同點(diǎn)。

(1)相同點(diǎn)

· Undefined和Null兩種數(shù)據(jù)類型都只有一個(gè)字面值,分別是undefined和null。

· Undefined類型和Null類型在轉(zhuǎn)換為Boolean類型的值時(shí),都會(huì)轉(zhuǎn)換為false。所以通過(guò)非運(yùn)算符(!)獲取結(jié)果為true的變量時(shí),無(wú)法判斷其值為undefined還是null。

· 在需要將兩者轉(zhuǎn)換成對(duì)象時(shí),都會(huì)拋出一個(gè)TypeError的異常,也就是平時(shí)最常見(jiàn)的引用異常。


var a;
var b = null;

console.log(a.name);  // Cannot read property 'name' of unde?ned
console.log(b.name);  // Cannot read property 'name' of null

上面代碼表示在通過(guò)某個(gè)變量引用name屬性時(shí),若該變量值實(shí)際為undefined或者null,就會(huì)拋出異常。

· Undefined類型派生自Null類型,所以在非嚴(yán)格相等的情況下,兩者是相等的,如下面代碼所示。


null == unde?ned;  // true

(2)不同點(diǎn)

· null是JavaScript中的關(guān)鍵字,而undefined是JavaScript中的一個(gè)全局變量,即掛載在window對(duì)象上的一個(gè)變量,并不是關(guān)鍵字。

· 在使用typeof運(yùn)算符檢測(cè)時(shí),Undefined類型的值會(huì)返回“undefined”,而Null類型的值會(huì)返回“object”。


typeof unde?ned; // unde?ned
typeof null;     // object

· 在通過(guò)call調(diào)用toString()函數(shù)時(shí),Undefined類型的值會(huì)返回“[object Undefined]”,而Null類型的值會(huì)返回“[object Null]”。


Object.prototype.toString.call(unde?ned);  // [object Unde?ned] 
Object.prototype.toString.call(null);      // [object Null]

· 在需要進(jìn)行字符串類型的轉(zhuǎn)換時(shí),null會(huì)轉(zhuǎn)換為字符串"null",而undefined會(huì)轉(zhuǎn)換為字符串"undefined"。


unde?ned + ' string';  // unde?ned string
null + ' string';      // null string

· 在需要進(jìn)行數(shù)值類型的轉(zhuǎn)換時(shí),undefined會(huì)轉(zhuǎn)換為NaN,無(wú)法參與計(jì)算;null會(huì)轉(zhuǎn)換為0,可以參與計(jì)算。


unde?ned + 0; // NaN
null + 0;     // 0

· 無(wú)論在什么情況下都沒(méi)有必要將一個(gè)變量顯式設(shè)置為undefined。如果需要定義某個(gè)變量來(lái)保存將來(lái)要使用的對(duì)象,應(yīng)該將其初始化為null。這樣不僅能將null作為空對(duì)象指針的慣例,還有助于區(qū)分null和undefined。

4. Boolean類型

Boolean類型(又稱布爾類型)的字面值只有兩個(gè),分別是true和false,它們是區(qū)分大小寫(xiě)的,其他值(如True和False)并不是Boolean類型的值。

Boolean類型使用最多的場(chǎng)景就是用于if語(yǔ)句判斷。在JavaScript中,if語(yǔ)句可以接受任何類型的表達(dá)式,即if(a)語(yǔ)句中的a,可以是Boolean、Number、String、Object、Function、Null、Undefined中的任何類型。

如果a不是Boolean類型的值,那么JavaScript解釋器會(huì)自動(dòng)調(diào)用Boolean()函數(shù)對(duì)a進(jìn)行類型轉(zhuǎn)換,返回最終符合if語(yǔ)句判斷的true或者false值。

不同類型與Boolean類型的值的轉(zhuǎn)換是Boolean類型的重點(diǎn),如下所述。

(1)String類型轉(zhuǎn)換為Boolean類型

· 空字符串""或者''都會(huì)轉(zhuǎn)換為false。

· 任何非空字符串都會(huì)轉(zhuǎn)換為true,包括只有空格的字符串" "。

(2)Number類型轉(zhuǎn)換為Boolean類型

· 0和NaN會(huì)轉(zhuǎn)換為false。

· 除了0和NaN以外,都會(huì)轉(zhuǎn)換為true,包括表示無(wú)窮大和無(wú)窮小的Infinity和-Infinity。

(3)Object類型轉(zhuǎn)換為Boolean類型

· 當(dāng)object為null時(shí),會(huì)轉(zhuǎn)換為false。

· 如果object不為null,則都會(huì)轉(zhuǎn)換為true,包括空對(duì)象{}。

(4)Function類型轉(zhuǎn)換為Boolean類型

· 任何Function類型的值都會(huì)轉(zhuǎn)換為true。

(5)Null類型轉(zhuǎn)換為Boolean類型

· Null類型只有一個(gè)null值,會(huì)轉(zhuǎn)換為false。

(6)Undefined類型轉(zhuǎn)換為Boolean類型

· Undefined類型只有一個(gè)undefined值,會(huì)轉(zhuǎn)換為false。

因?yàn)槠渌愋团cBoolean類型的值的轉(zhuǎn)換方式眾多,所以大家一定要熟練掌握這些規(guī)則。

主站蜘蛛池模板: 淅川县| 南部县| 定陶县| 遂溪县| 石泉县| 清徐县| 台湾省| 东宁县| 辉南县| 肇源县| 图片| 姚安县| 萍乡市| 东至县| 石林| 米易县| 来宾市| 商城县| 津南区| 社旗县| 宽城| 新郑市| 盐城市| 油尖旺区| 华坪县| 连州市| 涡阳县| 重庆市| 富裕县| 商水县| 沅陵县| 南投市| 开原市| 陆河县| 色达县| 桂林市| 永善县| 大化| 沙雅县| 定兴县| 西青区|