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

第1章 JavaScript重點概念

1.1 JavaScript的基本數據類型介紹

所有的編程語言都存在數據類型的概念。

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

接下來會詳細講解JavaScript中的基本數據類型。

1. Undefined類型

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

下面是4種常見的出現undefined的場景。

① 使用只聲明而未初始化的變量時,會返回“undefined”。


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

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


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

③ 函數沒有明確的返回值時,卻在其他地方使用了返回值,會返回“undefined”。


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

④ 函數定義時使用了多個形式參數(后文簡稱為形參),而在調用時傳遞的參數的數量少于形參數量,那么未匹配上的參數就為“undefined”。


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

2. Null類型

Null類型只有一個唯一的字面值null,表示一個空指針對象,這也是在使用typeof運算符檢測null值時會返回“object”的原因。

下面是3種常見的出現null的場景。

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


var returnObj = null;

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

returnObj = foo();

② JavaScript在獲取DOM元素時,如果沒有獲取到指定的元素對象,就會返回“null”。


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

③ 在使用正則表達式進行捕獲時,如果沒有捕獲結果,就會返回“null”。


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

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

Undefined和Null雖然是兩種不同的基本數據類型,存在一些不同的特性,但是在某些表現上存在著相同之處,這里就總結了Undefined和Null的相同點和不同點。

(1)相同點

· Undefined和Null兩種數據類型都只有一個字面值,分別是undefined和null。

· Undefined類型和Null類型在轉換為Boolean類型的值時,都會轉換為false。所以通過非運算符(!)獲取結果為true的變量時,無法判斷其值為undefined還是null。

· 在需要將兩者轉換成對象時,都會拋出一個TypeError的異常,也就是平時最常見的引用異常。


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

上面代碼表示在通過某個變量引用name屬性時,若該變量值實際為undefined或者null,就會拋出異常。

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


null == unde?ned;  // true

(2)不同點

· null是JavaScript中的關鍵字,而undefined是JavaScript中的一個全局變量,即掛載在window對象上的一個變量,并不是關鍵字。

· 在使用typeof運算符檢測時,Undefined類型的值會返回“undefined”,而Null類型的值會返回“object”。


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

· 在通過call調用toString()函數時,Undefined類型的值會返回“[object Undefined]”,而Null類型的值會返回“[object Null]”。


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

· 在需要進行字符串類型的轉換時,null會轉換為字符串"null",而undefined會轉換為字符串"undefined"。


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

· 在需要進行數值類型的轉換時,undefined會轉換為NaN,無法參與計算;null會轉換為0,可以參與計算。


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

· 無論在什么情況下都沒有必要將一個變量顯式設置為undefined。如果需要定義某個變量來保存將來要使用的對象,應該將其初始化為null。這樣不僅能將null作為空對象指針的慣例,還有助于區分null和undefined。

4. Boolean類型

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

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

如果a不是Boolean類型的值,那么JavaScript解釋器會自動調用Boolean()函數對a進行類型轉換,返回最終符合if語句判斷的true或者false值。

不同類型與Boolean類型的值的轉換是Boolean類型的重點,如下所述。

(1)String類型轉換為Boolean類型

· 空字符串""或者''都會轉換為false。

· 任何非空字符串都會轉換為true,包括只有空格的字符串" "。

(2)Number類型轉換為Boolean類型

· 0和NaN會轉換為false。

· 除了0和NaN以外,都會轉換為true,包括表示無窮大和無窮小的Infinity和-Infinity。

(3)Object類型轉換為Boolean類型

· 當object為null時,會轉換為false。

· 如果object不為null,則都會轉換為true,包括空對象{}。

(4)Function類型轉換為Boolean類型

· 任何Function類型的值都會轉換為true。

(5)Null類型轉換為Boolean類型

· Null類型只有一個null值,會轉換為false。

(6)Undefined類型轉換為Boolean類型

· Undefined類型只有一個undefined值,會轉換為false。

因為其他類型與Boolean類型的值的轉換方式眾多,所以大家一定要熟練掌握這些規則。

主站蜘蛛池模板: 云霄县| 东平县| 长乐市| 台南市| 长春市| 定日县| 榆社县| 连江县| 浙江省| 武宁县| 河东区| 梨树县| 新乐市| 利辛县| 宁强县| 和顺县| 鞍山市| 淳安县| 溧水县| 丰镇市| 九龙城区| 奎屯市| 河北区| 四川省| 安庆市| 潞西市| 鄂托克旗| 黑河市| 昌黎县| 阿克陶县| 巩义市| 会宁县| 阿城市| 濉溪县| 永州市| 蕉岭县| 昌都县| 焉耆| 南华县| 杭锦后旗| 金华市|