JavaScript中的類型、值和變量
JavaScript的類型可以分為兩個主要組別:原始類型和對象類型。JavaScript的原始類型包括數(shù)字、文本字符串(簡稱為字符串)和布爾值(也稱為布爾值)。
特殊值null
和undefined
也是原始值,但它們不是數(shù)字、字符串或布爾值。這兩個值通常被視為各自類型的獨(dú)特成員。ES6引入了另一種特殊類型,稱為Symbol
,用于語言擴(kuò)展而不破壞向后兼容性。
在JavaScript中,除了數(shù)字、字符串、布爾值、Symbol
、null
和undefined
之外的任何值都是對象。對象是對象類型的成員,它們是屬性的集合,每個屬性都有一個名稱和一個值(可以是原始值或另一個對象)。還有一個非常特殊的對象,稱為全局對象。
(程序員的軟技能:ke.qq.com/course/6034346)
常規(guī)JavaScript對象是無序的命名值的集合。語言本身還定義了一種特殊的對象,稱為數(shù)組。數(shù)組表示有序的數(shù)值集合。JavaScript包括用于操作數(shù)組的特殊語法,數(shù)組本身展現(xiàn)出與常規(guī)對象不同的行為。
除了基本對象和數(shù)組之外,JavaScript還定義了其他幾種有用的對象類型。Set
對象表示值的集合,而Map
對象表示鍵值映射。各種“類型化數(shù)組”類型便于對字節(jié)數(shù)組和其他二進(jìn)制數(shù)據(jù)進(jìn)行操作。RegExp
類型表示文本模式,并在字符串上支持復(fù)雜的匹配、搜索和替換操作。Date
類型表示日期和時間,支持基本日期計(jì)算。Error
類型及其子類表示在JavaScript代碼執(zhí)行過程中可能發(fā)生的錯誤。
將JavaScript與靜態(tài)語言區(qū)分開的是,函數(shù)和類不僅僅是語法,它們本身是可以由JavaScript程序操作的值。與JavaScript中的其他非原始值一樣,函數(shù)和類也是特殊類型的對象。
在內(nèi)存管理方面,JavaScript解釋器執(zhí)行自動垃圾回收。這意味著JavaScript程序員通常不需要關(guān)心對象或其他值的銷毀和釋放。當(dāng)一個值變得不可訪問,或者不再被程序引用,解釋器知道它不再需要,并自動釋放它占用的內(nèi)存(盡管JavaScript程序員有時應(yīng)該謹(jǐn)慎,以防止值比預(yù)期的持續(xù)時間更長,變得無法回收)。
JavaScript支持面向?qū)ο蟮木幊田L(fēng)格。實(shí)質(zhì)上,這意味著不要為不同類型的值定義全局函數(shù),而是讓這些類型定義操作值本身的方法。例如,要對數(shù)組的元素進(jìn)行排序,您不需要將數(shù)組傳遞給sort()
函數(shù);相反,您可以在數(shù)組a
上調(diào)用sort()
方法:
從技術(shù)角度來看,只有JavaScript對象具有方法。但是,數(shù)字、字符串、布爾值和符號似乎也有方法。在JavaScript中,只有null
和undefined
不能調(diào)用方法。
JavaScript的對象類型是可變的,而其原始類型是不可變的??勺冾愋涂梢愿?;例如,JavaScript程序可以修改對象的屬性和數(shù)組元素。數(shù)字、布爾值、符號、null
和undefined
是不可變的。例如,修改數(shù)字沒有意義。字符串可以被視為字符數(shù)組,您可能期望它們是可變的。但是,在JavaScript中,字符串也是不可變的。雖然您可以使用索引訪問字符串中的字符,但JavaScript不提供修改字符串中現(xiàn)有字符的方法。
JavaScript自由地轉(zhuǎn)換不同類型的值。例如,如果程序期望一個字符串,但您提供了一個數(shù)字,數(shù)字將自動轉(zhuǎn)換為字符串。同樣,如果在期望布爾值的地方使用非布爾值,JavaScript將相應(yīng)地進(jìn)行轉(zhuǎn)換。
JavaScript中的這種自由值轉(zhuǎn)換影響了等式的定義,等式運(yùn)算符==
執(zhí)行類型強(qiáng)制轉(zhuǎn)換(盡管在實(shí)踐中,等式運(yùn)算符==
通常被避免,而使用嚴(yán)格等式運(yùn)算符===
,它不執(zhí)行類型強(qiáng)制轉(zhuǎn)換)。
常量和變量允許我們在程序中使用名稱引用值。常量使用const
聲明,變量使用let
(或在較舊的JavaScript代碼中使用var
)聲明。JavaScript的常量和變量是無類型的;它們的聲明不限制它們可以保存的值的類型。
(程序員的軟技能:ke.qq.com/course/6034346)