引用類型
1. Object
- 創(chuàng)建新對象用
var person = new Object()
,可見Object
是一個構(gòu)造函數(shù)菜秦,typeof Object === 'function'
。
2. Array
-
用
new Array()
創(chuàng)建數(shù)組的時候通砍,根據(jù)傳入?yún)?shù)的不同,效果也不一樣隙轻。var colors = new Array(3) // 創(chuàng)建一個包含3項的數(shù)組埠帕,每一項都是空 var names = new Array('3') //創(chuàng)建一個只有一項“3”的數(shù)組 var photos = new Array(3,4) //創(chuàng)建一個包含兩項的數(shù)組 [3,4]
ES6
中增加了新的創(chuàng)建數(shù)組的方法,沒有歧義Array.of()
,都是創(chuàng)建一個包含你傳入項的數(shù)組玖绿。 -
注意數(shù)組的
length
屬性敛瓷,它不是只讀的,因此可以設(shè)置這個屬性斑匪,向數(shù)組的末尾移除或者添加新項呐籽。比如,當(dāng)你需要只保留數(shù)組中第一項的時候蚀瘸,你可以直接設(shè)置
arr.length = 1
-
數(shù)組的檢測
數(shù)組的檢測有多種方法狡蝶,
instanceof
,Object.prototype.toString.call(arr)
,不過這次我們推薦使用的是ES5
中的Array.isArray()
-
數(shù)組的排序方法
sort
方法,sort
的排序原則是調(diào)用每個數(shù)組項的toString()
方法贮勃,然后比較得到的字符串贪惹,即使數(shù)組中的每一項都是數(shù)字,sort()
方法比較的也是字符串 -
數(shù)組的歸并方法
reduce
方法接受的函數(shù)可以接受4個參數(shù)寂嘉,前一個值奏瞬,當(dāng)前值,項的索引和數(shù)組對象
3. RegExp
-
正則中的元字符
js
正則中元字符有([{}])|.+-?*$^
4. Function
每個函數(shù)都是
Function
類型的實例泉孩,而且都與其他引用類型一樣具有屬性和方法硼端,函數(shù)也是對象,所以函數(shù)名實際上也是一個指向函數(shù)對象的指針寓搬,不會與某個函數(shù)綁定珍昨。-
函數(shù)聲明與函數(shù)表達式
函數(shù)聲明和函數(shù)表達式在代碼中被解析的時候,是有區(qū)別的,解析器會率先讀取函數(shù)聲明镣典,并使其在執(zhí)行任何代碼之前可用兔毙;至于函數(shù)表達式,則必須等到解析器執(zhí)行到它所在行骆撇,才會真正的被解釋執(zhí)行瞒御。
-
函數(shù)的內(nèi)部屬性
在函數(shù)內(nèi)部有兩個特殊的對象:
arguments
和this
,arguments
的主要作用是保存參數(shù)神郊,但是它還有一個屬性callee
,這個屬性指向擁有這個arguments
對象的函數(shù)肴裙。 -
函數(shù)的屬性和方法
每個函數(shù)都包含兩個屬性:
length
和prototype
,length
屬性表示函數(shù)希望接受的命名參數(shù)的個數(shù)涌乳。prototype
則保存函數(shù)所有的實例方法蜻懦。
5. 基本包裝類型
js
提供了3個特殊的引用類型:Boolean
、Number
夕晓、String
宛乃。
每當(dāng)我們讀取一個基本類型值的時候,后臺就會創(chuàng)造一個對應(yīng)的基本類型的包裝對象
var s1 = "some text"
var s2 = s1.substring(2)
當(dāng)執(zhí)行到第二行代碼的時候蒸辆,后臺都會自動完成以下處理:
- 創(chuàng)建
String
類型的一個實例 - 在這個實例上調(diào)用對應(yīng)的方法
- 銷毀這個實例
以上三個步驟同樣適用于Boolean
征炼、Number
。執(zhí)行完成后對應(yīng)的實例會立即銷毀躬贡,所以我們不能在基本類型上添加屬性和方法谆奥。
對基本類型的實例調(diào)用typeof
會返回‘object’
,而且所有基本包裝類型的對象都會被轉(zhuǎn)換成布爾值true
適用new
調(diào)用基本包裝類型的構(gòu)造函數(shù)拂玻,與直接調(diào)用同名的轉(zhuǎn)型函數(shù)是不一樣的
var value = '25'
var number = Number(value)
typeof number // 'number'
var obj = new Number(value)
typeof obj // 'object'
6. Global 對象
注意encodeURL()
和encodeURLComponent()
的區(qū)別
encodeURL()
不會對本身屬于URI
的特殊字符進行編碼酸些,比如冒號、正斜杠檐蚜、問號和井號
encodeURLComponent()
會對URI
中所有的特殊字符進行編碼