「這是我參與2022首次更文挑戰(zhàn)的第5天,活動(dòng)詳情查看:2022首次更文挑戰(zhàn)」
寫在前頭
大多數(shù)小伙伴看技術(shù)書籍都會(huì)用“啃”來(lái)描述讀書的直觀感受,當(dāng)然我也是一個(gè)前端小白,白的透明那種,但是我在讀技術(shù)書籍感覺到“啃”的時(shí)候,我希望把我啃紅寶書第四版的過(guò)程的想法,總結(jié)帶給大家,以供后來(lái)者能夠更快上手。
注: 本文由于作者水平原因,如有錯(cuò)誤之處,懇請(qǐng)大家指正,另外隨著學(xué)習(xí)的深入,體會(huì)的加深,我會(huì)不斷回來(lái)更新,修改這類文章。
思維導(dǎo)圖

脈絡(luò)
這小節(jié)就是介紹了3.4數(shù)據(jù)類型 中的概述,typeof操作符,undefined數(shù)據(jù)類型。
3.4數(shù)據(jù)類型

概述

一、 簡(jiǎn)單數(shù)據(jù)類型
別名:原始類型
一共有6種,分別是Undefined、Null、Boolean、Number、String 和 Symbol。
復(fù)雜數(shù)據(jù)類型
Object(對(duì)象) 簡(jiǎn)單來(lái)說(shuō)對(duì)象包含了許多屬性,方法。是一共集合
用法:JavaScript中數(shù)據(jù)類型是“活”的,一種數(shù)據(jù)類型可以當(dāng)其他的數(shù)據(jù)類型使用。所以使用更加隨意。
3.4.1. typeof 操作符

- 確定任意變量的數(shù)據(jù)類型
在確定6大變量數(shù)據(jù)類型時(shí)首先得知道這6個(gè)代表什么。
書中已經(jīng)寫到6個(gè)數(shù)據(jù)類型的表示含義了,就不贅述。
使用typeof就是在typeof后面直接加變量名。這樣返回的值就是該變量對(duì)應(yīng)的數(shù)據(jù)類型。
const age = 100;
console.log(typeof age); // 輸出的是Number
- 區(qū)分函數(shù)和其他對(duì)象
函數(shù)其實(shí)就是一種特殊的對(duì)象,他有著直接獨(dú)特的屬性。所以必須得和對(duì)象區(qū)分開,函數(shù)不是數(shù)據(jù)類型!
3.4.2Undefined類型

- 只有一個(gè)值,初始化默認(rèn)賦值
就是在聲明一個(gè)變量時(shí),沒有對(duì)變量進(jìn)行賦值,默認(rèn)這個(gè)變量的值就是undefined。
var age;
var age; // 不會(huì)報(bào)錯(cuò)
- 字面值undefined
作用:就是表明這個(gè)變量沒有賦值,是聲明了,但是沒有賦值的。
目的:在之前是沒有undefined這個(gè)數(shù)據(jù)類型的,但是為了和null空對(duì)象指針做出區(qū)別。才衍生出來(lái)了undefined這個(gè)數(shù)據(jù)類型變量。
- 包含 undefined 值的變量跟未定義變量的區(qū)別
①console.log
在聲明了變量使用console.log會(huì)輸出undefined,但是在為聲明就使用console.log就會(huì)報(bào)錯(cuò),說(shuō)明這個(gè)變量未聲明。
②typeof
推薦初始化變量理由 :核心是為了使用typeof來(lái)區(qū)別一個(gè)變量是否已經(jīng)聲明。
原因:因?yàn)閠ypeof操作符對(duì)未聲明的變量和已經(jīng)聲明但是沒有賦值的變量返回的值都是一樣的undefined。
那么這樣就無(wú)法通過(guò)typeof來(lái)區(qū)別。所以在使用typeof之前就得讓他們不一樣,那么思考一下怎么不一樣,對(duì)了,給聲明的變量賦值,這樣typeof之后返回的值就不再是undefined了,一個(gè)結(jié)果是undefined,一個(gè)結(jié)果不是,自然我們就可以知道變量是否已經(jīng)聲明。
返回值的本質(zhì)區(qū)別
聲明變量未賦值和未聲明變量雖然typeof都是返回的undefined。邏輯上講這是對(duì)的,因?yàn)殡m然嚴(yán)格來(lái)講,這兩個(gè)變量存在根本性差異,但它們都無(wú)法執(zhí)行實(shí)際操作。(書中原話)
④delete
書中原話:對(duì)未聲明的變量調(diào)用 delete 也不會(huì)報(bào)錯(cuò),但這個(gè)操作沒什么用,實(shí)際上在嚴(yán)格模式下會(huì)拋出錯(cuò)誤。
⑤try-catch區(qū)別未聲明,未初始化
要區(qū)別一個(gè)值是未聲明還是未初始化,可以使用 try-catch,例如:
if (typeof age == 'undefined') {
try {
// 未初始化
console.log(age);
} catch (error) {
console.error('age is undeclared.');
}
}
⑥if檢測(cè)undefined假值
undefined是一個(gè)假值,什么是假值,也就是說(shuō)通過(guò)數(shù)據(jù)類型轉(zhuǎn)換之后,會(huì)轉(zhuǎn)換為false。既然可以轉(zhuǎn)換為布爾值false,那么我們自然就可以通過(guò)條件判斷語(yǔ)句該判斷他是否為一個(gè)假值,進(jìn)而來(lái)判斷他是否為undefined。
注意: 只有判斷undefined其實(shí)是不嚴(yán)謹(jǐn)?shù)?,因?yàn)橛屑僦档那闆r很多。