- JavaScript重難點實例精講
- 周雄
- 1746字
- 2020-10-30 15:51:51
第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類型的值的轉換方式眾多,所以大家一定要熟練掌握這些規則。
- C++案例趣學
- 基于粒計算模型的圖像處理
- Docker進階與實戰
- Mastering Selenium WebDriver
- Learning Data Mining with Python
- Android 7編程入門經典:使用Android Studio 2(第4版)
- aelf區塊鏈應用架構指南
- Silverlight魔幻銀燈
- TypeScript圖形渲染實戰:基于WebGL的3D架構與實現
- Web Development with MongoDB and Node(Third Edition)
- Python機器學習算法: 原理、實現與案例
- 時空數據建模及其應用
- 微信小程序開發實戰:設計·運營·變現(圖解案例版)
- IDA Pro權威指南(第2版)
- Python預測分析與機器學習