- JavaScript重難點(diǎn)實(shí)例精講
- 周雄
- 8字
- 2020-10-30 15:51:51
第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ī)則。
- Java范例大全
- Visual Basic程序開(kāi)發(fā)(學(xué)習(xí)筆記)
- 信息安全技術(shù)
- C語(yǔ)言程序設(shè)計(jì)立體化案例教程
- Kotlin Standard Library Cookbook
- VMware虛擬化技術(shù)
- Web前端應(yīng)用開(kāi)發(fā)技術(shù)
- 開(kāi)源項(xiàng)目成功之道
- Visual C++程序設(shè)計(jì)與項(xiàng)目實(shí)踐
- Responsive Web Design with jQuery
- C++服務(wù)器開(kāi)發(fā)精髓
- 青少年P(guān)ython趣味編程
- Raspberry Pi Robotic Projects
- Java Web入門(mén)很輕松(微課超值版)
- 信息學(xué)競(jìng)賽寶典:基礎(chǔ)算法