第五章 引用類型前端
引用類型的值(對象)是引用類型的一個實例。在ECMAScript中,引用類型是一種數據結構,用於將數據和功能組織在一塊兒。引用類型有時候也被稱爲對象定義,由於他們描述的是一類對象所具備的屬性和方法。正則表達式
5.1 Object類型express
5.1.1建立Object實例的方式有兩種數組
a.使用new操做符後跟Object構造函數瀏覽器
var person = new Object();數據結構
b.對象字面量表示法app
var person = { name:」111」,age:22 };框架
在經過對象字面量定義對象時,實際上不會調用Object構造函數。dom
對象字面量也是向函數傳遞大量可選參數的首選方式。函數
5.1.2 訪問對象屬性
a.使用點表示法訪問對象屬性,這也是不少面嚮對象語言中通用的方法。
b.使用方括號表示法來訪問對象的屬性。在使用方括號語法時,應該將要訪問的屬性以字符串的形式放在方括號中。
c.方括號語法的優勢:能夠經過變量來訪問屬性,(好比for循環時的arr[i])
5.2 Array類型
ECMAScript數組的每一項能夠保存任何類型的數據。
5.2.1 建立數組的基本方式
a.使用Array構造函數
var colors = new Array();
若是預先知道數組要保存的項目數量,能夠給構造函數傳遞該數量,而該數量會自動變成length屬性的值。也能夠向Array構造函數傳遞數組中應該包含的項。
固然,給構造函數傳遞一個值也能夠建立數組
b. 使用數組字面量表示法建立數組
數組字面量由一對數組項的方括號表示,多個數組項之間以逗號隔開
5.2.2讀取數組每一項的值
在讀取和設置數組的值時,要使用方括號並提供相應值的基於0的數字索引。
利用length屬性也能夠方便地在數組末尾添加新項
5.2.3 檢測數組
instanceof 操做符問題在於,它假定單一的全局執行環境。若是網頁中包含多個框架,那實際上就存在兩個以上不一樣的全局執行環境,從而存在兩個以上不一樣版本的Array構造函數。若是你從一個框架向另外一個框架傳入一個數組,那麼傳入的數組與在第二個框架中原生建立的數組分別具備各自不一樣的構造函數。
爲了解決這個問題,ECMAScript5 新增了Array.isArray()方法。這個方法的目的是最終肯定某個值究竟是不是數組,而無論它是在哪一個全局執行環境中建立的。
5.2.4 轉換方法
toString():會返回由數組中每一個值的字符串形式拼接而成的一個以逗號分隔的字符串。
valueOf():返回的仍是數組
*/ alert()要接收字符串參數,因此它會在後臺調用toString()方法 /*
toLocaleString(): 會返回一個數組值的以逗號分隔的字符串。調用每一項的toLocaleString()方法。
join() :可使用不一樣的分隔符來構建這個字符串。join()方法只接收一個參數,即用做分隔符的字符串,而後返回包含全部數組項的字符串。
5.2.3 棧方法
後進先出
push(): 能夠接收任意數量的參數,把它們逐個添加到數組末尾,並返回修改後數組的長度。
pop(): 從數組末尾移除最後一項,減小數組的length值,而後返回移除的項。
5.2.4 隊列方法
先進先出
push()
shift():移出數組中的第一個項並返回該項,同時數組長度減1。
unshift():在數組前端添加任意個項,並返回新數組的長度。
5.2.5 重排序方法
reverse(): 反轉數組項的順序
sort():方法按升序排列數組項——即最小的值位於最前面,最大的值排在最後面。爲了實現排序,sort()方法會調用每一個數組項的toString()轉型方法,而後比較獲得的字符串,以肯定如何排序。即便數組中的每一項都是數值,sort()方法比較的也是字符串。
sort()方法能夠接收一個比較函數做爲參數,以便咱們制定哪一個值位於前面。
reverse()和sort()方法的返回值是通過排序以後的數組。
5.2.6 操做方法
concat():能夠基於當前數組中的全部項建立一個新數組。具體來講,這個方法會先建立當前數組一個副本,而後將接收到的參數添加到這個副本的末尾,最後返回新構建的數組。
slice():接收一或兩個參數,即要返回項的起始和結束位置。在只有一個參數的狀況下,slice()方法返回從該參數指定位置開始到當前數組末尾的全部項,若是有兩個參數,該方法返回起始和結束位置之間的項——但不包括結束位置的項。
splice():主要用途是向數組中部插入項。
刪除:只需指定2個參數:要刪除的第一項的位置和要刪除的項數
例如,splice(0,2)會刪除數組中的前兩項。
插入/替換:能夠向指定位置插入任意數量的項,需提供三個(或更多)參數
第一個參數=》起始位置,第二個參數=》要刪除的項數(0,便是不刪除,出入若干項),以後的參數=》要插入的若干項。
5.2.7 位置方法
indexOf()與lastIndexOf():接收兩個參數:要查找的項和(可選的)表示查找起點位置的索引。其中,indexOf()方法從數組的開頭(位置0)開始向後查找,lastIndexOf()方法則從數組的末尾開始向前查找。這兩個方法都返回要查找的項在數組中的位置,或者在沒找到的狀況下返回-1。
5.2.8 迭代方法
ECMAScript爲數組定義了5個迭代方法。每一個方法都接收兩個參數:要在每一項上運行的函數和(可選的)運行該函數的做用域對象——影響this的值。傳入這些方法中的函數會接收三個參數:數組項的值、該項在數組中的位置和數組對象自己。根據使用方法的不一樣,這個函數執行後的返回值可能會也可能不會影響訪問的返回值。
every():對數組中的每一項運行給定函數,若是該函數對每一項都返回true,則返回true。
filter():對數組中的每一項運行給定函數,返回該函數會返回true的項組成的數組。
forEach(): 對數組中每一項運行給定函數。這個方法沒有返回值。
map(): 對數組中的每一項運行給定函數,返回每次函數調用的結果組成的數組。
some(): 對數組中的每一項運行給定函數,若是該函數對任一項返回true,則返回true。
5.2.9 縮小方法
reduce()與reduceRight(): 這兩個方法都會迭代數組的全部項,而後構建一個最終返回的值。其中,reduce()方法從數組的第一項開始,逐個遍歷到最後。而reduceRight()則從數組的最後一項開始,向前遍歷到第一項。
這兩個方法都接收兩個參數:一個在每一項上調用的函數和(可選的)做爲縮小基礎的初始值。傳給reduce()和reduceRight()的函數接收四個參數:前一個值、當前值、項的索引和數組對象。這個函數返回的任何值都會做爲第一個參數自動傳給下一項。第一次迭代發生在數組的第二項上,所以第一個參數是數組的第一項,第二個參數就是數組的第二項。
5.3 Date類型
建立一個日期對象
var now = new Date();
在調用Date構造函數而不傳遞參數的狀況下,新建立的對象自動得到當前日期和時間。若是想根據特定的日期和時間建立日期對象,必須傳入表示該日期的毫秒數(即從UTC時間1970年1月1日午夜起至該日期止通過的毫秒數)。爲了簡化這一計算過程,ECMAScript提供了兩個方法:Date.parse()和Date.UTC()。
Date.parse():接受一個標示日期的字符串參數,而後嘗試根據這個字符串返回相應日期的毫秒數。ECMA-262沒有定義Date.parse()應該支持哪一種日期格式,所以這個方法的行爲因實現而異,並且一般是因地區而異。一般接受下列日期格式:
「月/日/年」, 如6/13/2004;
「英文月 日,年」如 January 12,2004;
ISO 8601擴展格式YYYY-MM-DDTHH:mm:ss (例如 2004-05-25T00:00:00)。這有兼容ECMAScript 5 的實現支持這種格式。
若是傳入Date.parse()方法的字符串不能表示日期,那麼它會返回NaN。實際上,若是直接將表示日期的字符串傳遞給Date構造函數,也會在後臺調用Date.parse()。
Date.UTC()方法一樣也返回表示日期的毫秒數,但它與Date.parse()再構建值時使用不一樣的信息。Date.UTC()的參數分別是年份,基於0的月份(一月是0)、月中的哪一天(1到31)、小時數(0到23)、分鐘、秒以及毫秒數。在這些參數中,只有前年是必須的(年也不寫會返回NaN)。若是沒有提供月中天數爲1;若是省略其餘參數,則通通假設爲0。
ECMAScript 5 添加了Date.now()方法,返回表示調用這個方法時的日期和時間的毫秒數。
5.3.1 繼承的方法
Date類型重寫了toLocaleString()、toString()和valueOf()方法;
toLocaleString(): 按照與瀏覽器設置的地區相適應的格式返日期和時間。這大體意味着時間格式中會包含AM或PM,但不會包含時區信息。
toString(): 一般返回帶有時區信息的日期和時間,其中時間通常以軍用時間表示
valueOf(): 返回日期的毫秒錶示。所以,能夠方便實用比較操做符(小於或大於)來比較日期值。
5.3.2 日期格式化方法
Date類型還有一些專門用於將日期格式化爲字符串的方法
toDateString()——以特定於實現的格式顯示星期幾、月、日和年;toTimeString()——以特定於實現的格式顯示時、分、秒和時區;toLocaleDateString()——以特定於地區的格式顯示星期幾、月、日和年;toLocaleTimeString()——以特定於地區的格式顯示時、分、秒和時區;
toUTCString()——以特定於實現的格式顯示完整的UTC日期。
5.3.3 衆多的日期/時間組件方法(隨用隨查)
5.4 RegExp 類型
ECMAScript經過RegExp類型來支持正則表達式。
var expression = /pattern/flags;
其中的模式(pattern)部分能夠是任何簡單或複雜的正則表達式,能夠包含字符串、限定符、分組、向前查找以及反向引用。每一個正則表達式均可帶有一或多個標誌(flags),用來標明正則表達式的行爲。
5.4.1 正則表達式的匹配模式支持下列3個標誌
g: 表示全局(global)模式。即模式將被應用於全部字符串,而非在發現第一個匹配項時當即中止。
i: 表示不區分大小寫(case-insensitive)模式,即在肯定匹配項時忽略模式與字符串的大小寫;
m: 表示多行(multiline)模式,即在到達一行文本末尾時還會繼續查找下一行中是否存在於模式匹配的項。
5.4.2 模式中使用的全部元字符都必須轉義
( , ) , [ , ] , { , } , \ , ^ , $ , | , ? , * , + , .
這些元字符在正則表達式都有一或多種特殊用途,所以若是想要匹配字符串中包含的這些字符,就必須對它們進行轉義。
5.4.3 以字面量形式來定義的正則表達式
5.4.4 使用RegExp構造函數
它接收兩個參數:一個是要匹配的字符串模式,另外一個是可選的標誌字符串。
傳遞給RegExp構造函數的兩個參數都是字符串(不能把正則表達式字面量傳遞給RegExp構造函數)。因爲RegExp構造函數的模式參數都是字符串,因此在某些狀況下要對字符進行雙重轉義。那些已經轉義過的字符也是如此,例如:字符\在字符串中一般被轉義爲\\,而在正則表達式字符串中就會變成\\\\。
5.4.5 RegExp實例屬性
global: 布爾值,表示是否設置了g標誌。
ignoreCase: 布爾值,表示是否設置了i標誌。
lastIndex: 整數,表示開始搜索下一個匹配項的字符位置,從0算起。
multiline: 布爾值,表示是否設置了m標誌。
source: 正則表達式的字符串表示,按照字面量形式而非傳入構造函數中的字符串模式返回。
5.4.6 RegExp 實例方法
exec(): 專門爲捕獲組而設計的,接受一個參數,即要應用模式的字符串,而後返回包含第一個匹配項信息的數組;或者在沒有匹配項的狀況下返回null。返回的數組雖然是Array的實例,但包含兩個額外的屬性:index和input其中,index表示匹配項在字符串中的位置,而input表示應用正則表達式的字符串。在數組中,第一項是與整個模式匹配的字符串,其餘項是與模式中的捕獲組匹配的字符串(若是模式中沒有捕獲組,則該數組只包含一項)。
對於exec()方法而言,即便在模式中設置了全局標誌(g),它每次也只會返回一個匹配項。在不設置全局標誌的狀況下,在同一個字符串上屢次調用exec()將始終返回第一個匹配項的信息。而在設置全局標誌的狀況下,每次調用exec()則都會在字符串中繼續查找新匹配項。
第一個模式pattern1不是全局模式,所以每次調用exec()返回的都是第一個匹配項(」cat」)。而第二個模式pattern2是全局模式,所以每次調用exec()都會返回字符串中的下一個匹配項,直至搜索到字符串末尾爲止。此外,還應該注意模式的lastIndex屬性的變化狀況。在全局匹配模式下,lastIndex的值每次調用exec()後都會增長,而在非全局模式下始終保持不變。
正則表達式的第二個方式是test(),它接受一個字符串參數。在模式與該參數匹配的狀況下返回true;不然,返回false。在只想知道目標字符串與某個模式是否匹配,但不須要知道其文本內容的狀況下,使用這個方法很是方便。所以,test()方法常常被用在if語句中。
5.4.7 RegExp構造函數屬性
RegExp構造函數包含一些屬性。這些屬性適用於做用域中的全部正則表達式,而且基於所執行的最近一次正則表達式操做而變化。關於這些屬性的另外一個獨特之處,就是能夠經過兩種方式訪問它們。換句話說,這些屬性分別有一個長屬性名和一個短屬性名。
長屬性名 |
短屬性名 |
說明 |
input |
$_ |
最近一次要匹配的字符串。 |
lastMatch |
$& |
最近一次的匹配項 |
lastParen |
$+ |
最近一次匹配的捕獲組 |
leftContext |
$` |
Input字符串中lastMatch以前的文本 |
multiline |
$* |
布爾值,表示是否全部表達式都使用多行模式 |
rightContext |
$’ |
Input字符串中lastMatch以後的文本 |
使用這些屬性能夠從exec()或test()執行的操做中提取出更具體的信息。
5.5 Function類型
函數其實是對象。每一個函數都是Function類型的實例,並且都與其餘引用類型同樣具備屬性和方法。因爲函數是對象,所以函數名實際上也是一個指向函數對象的指針,不會與某個函數綁定。函數一般是使用函數聲明語法定義的。
5.5.1 沒有重載
若是在ECMAScript中定義了兩個名字相同的函數,則該名字只屬於後定義的函數。
5.5.2 函數聲明與函數表達式
解析器會率先讀取函數聲明,並使其在執行任何代碼以前可用(能夠訪問);至於函數表達式,則必須等到解析器執行到它所在的代碼行,纔會真正被解釋執行。
5.5.3 做爲值的函數
由於ECMAScript中的函數名自己就是變量,因此函數也能夠做爲值來使用。也就是說,不只能夠像傳遞參數同樣把一個函數傳遞給另外一個函數,並且能夠將一個函數做爲另外一個函數的結果返回。
能夠從一個函數中返回另外一個函數,並且這也是極爲有用的一種技術。假設有一個對象數組,咱們想要根據某個對象屬性對數組進行排序。而傳遞給數組sort()方法的比較函數要接收兩個參數,即要比較的值。但是,咱們須要一種方式來指明按照那個屬性來排序。要解決這個問題,能夠定義一個函數,它接收一個屬性名,而後根據這個屬性名來建立一個比較函數。
5.5.4 函數內部屬性
在函數內部,有兩個特殊的對象:arguments和this。
arguments的主要用途是保存函數參數,這個對象還有一個名叫callee的屬性,
該屬性是一個指針,指向擁有這個arguments對象的函數。
函數內部的另外一個特殊對象是this,this引用的是函數據以執行的環境對象——或者也能夠說是this值(當在網頁的全局做用域中調用函數時,this對象引用的就是window)。
5.5.5 函數屬性和方法
每一個函數都包含兩個屬性: length和prototype。
length屬性表示函數但願接收的命名參數的個數。
對於ECMAScript中的引用類型而言,prototype是保存它們全部實例方法的真正所在。諸如toString()和valueOf()等方法實際上都保存在prototype名下。在ECMAScript5中,prototype屬性是不可枚舉的,所以使用for-in沒法發現。
每一個函數都包含兩個非繼承而來的方法:apply()和call()。這兩個方法的用途都是在特定的做用域中調用函數,實際上等於設置函數體內this對象的值。首先,apply()方法接收兩個參數:一個是其中運行函數的做用域,另外一個是參數數組。其中,第二個參數能夠是Array的實例,也能夠是arguments對象。
call()方法與apply()方法的做用相同,它們的區別僅在於接收參數的方式不一樣。對於call()方法而言,第一個參數是this值沒有變化,變化的是其他參數都直接傳遞給函數。
apply()和call()真正的用武之地在於可以擴充函數賴以運行的做用域。
bind():這個方法會建立一個函數的實例,其this值會被綁定到傳給bind()函數的值。
函數繼承的toLocaleString()和toString()方法始終都返回函數的代碼。
5.6 基本包裝類型
3個特殊的引用類型: Boolean、Number和String。(實際上,每當讀取一個基本類型值的時候,後臺就會建立一個對應的基本包裝類型的對象,從而讓咱們可以調用一些方法來操做這些數據)
5.6.1 Boolean類型
要建立Boolean對象,能夠調用Boolean構造函數並傳入true或false值。
5.6.2 Number類型
要建立Number對象,能夠在調用Number構造函數時向其中傳遞相應的數值。
toFixed():按照指定的小數位(參數)返回數值的字符串表示,自動四捨五入。
toExponential(): 該方法返回以指數表示法(也稱e表示法)表示的數值的字符串形式。
5.6.3 String類型
要建立String對象,能夠在調用String構造函數時向其中傳遞相應的字符串。
String對象的方法也能夠在全部基本的字符串值中訪問到。其中,繼承的valueOf()、toLocaleString()和toString()方法,都返回對象所表示的基本字符串值。
String類型的每一個實例都有一個length屬性,表示字符串中包含多個字符。
a. 字符方法
charAt():接收一個參數,基於0的字符位置,以單字符串的形式返回給定位置的那個字符。
charCodeAt():接收一個參數,基於0的字符位置,返回字符的字符編碼。
b. 字符串操做方法
concat(): 用於將一或多個字符串拼接起來,但會拼接的獲得的新字符串。
ECMAScript還提供了三個基於子字符串建立字符串的方法:slice()、substr()和substring()。這三個方法都會返回被操做字符串的一個子字符串,並且也都接受一或兩個參數。第一個參數指定子字符串的開始位置,第二個參數(在指定的狀況下)表示子字符串到哪裏結束。具體來講,slice()和substring()的第二個參數指定的是子字符串最後一個字符後面的位置。而substr()的第二個參數指定的則是返回的字符個數。若是沒有給這些方法傳遞第二個參數,則將字符串的長度做爲結束位置。與concat()方法同樣。slice()、substr()和substring()也不會修改字符串自己的值——它們只是返回一個基本類型的字符串值,對原始字符串沒有任何影響。
c.字符串位置方法
有兩個能夠從字符串中查找字符串的方法:indexOf()和lastIndexOf()。這兩個方法都是從一個字符串中搜索給定的子字符串,而後返子字符串的位置(若是沒有找到該字符串,則返回-1)。
indexOf():從字符串的開頭向後搜索子字符串。
lastIndexOf():從字符串的末尾向前搜索子字符串。
這兩個方法均可以接收可選的第二個參數,表示從字符串中那個位置開始搜索。
在使用第二個參數的狀況下,能夠經過循環調用indexOf()或lastIndexOf()來找到全部匹配的子字符串。
d. trim()方法
這個方法會建立一個字符串的副本,刪除前置及後綴的全部空格。
e.字符串大小寫轉換方法
toLowerCase():轉換爲大寫
toLocaleLowerCase():轉換爲大寫,針對特定地區的實現
toUpperCase():轉換爲小寫
toLocaleUpperCase():轉換爲小寫,針對特定地區的實現
f. 字符串的模式匹配方法
match(): 在字符串上調用這個方法,本質上與調用RegExp的exec()方法相同。
match()方法只接受一個參數,要麼是一個正則表達式,要麼是一個RegExp對象。
search(): 這個方法的惟一參數與match()方法的參數相同:由字符串或RegExp對象指定的一個正則表達式。search()方法返回字符串中第一個匹配項的索引;若是沒有找到匹配項,則返回-1。
replace():這個方法接受兩個參數:第一個參數能夠是一個RegExp對象或者一個字符串(這個字符串不會被轉換成正則表達式),第二個參數能夠是一個字符串或者一個函數。若是第一個參數是字符串,那麼只會替換第一個子字符串。要想替換全部子字符串,惟一的辦法就是提供一個正則表達式,並且要制定全局(g)標誌。
split(): 這個方法能夠基於指定的分隔符將一個字符串分割成多個子字符串,並將結果放在一個數組中。split()方法能夠接受可選的第二個參數,用於指定數組的大小,以便確保返回的數組不會超過既定大小。
localeCompare():這個方法比較兩個字符串,並返回比較結果
若是字符串在字母表中應該排在字符串參數以前,則返回一個負數(大多數狀況下是-1)。
若是字符串等於字符串參數,則返回0;
若是字符串在字母表中應該排在字符串參數以後,則返回一個正數(大多數狀況下是1.)
formCharCode():這個方法的任務是接收一或多個字符編碼,而後將它們轉換成一個字符串。
5.7 單體內置對象
ECMA-262對內置對象的定義是: 「由ECMAScript實現提供的、不依賴與宿主環境的對象,這些對象在ECMAScirpt程序執行以前就已經存在了。」意思就是說,開發人員沒必要顯式地實例化內置對象,由於它們已經實例化了。ECMA-262頂一個了兩個單體內置對象:Global和Math。
5.7.1 Global對象
Global(全局)對象能夠說是ECMAScript中最特別的一個對象了。Global對象在某種意義上是做爲一個終極的「兜底兒對象」來定義的。換句話說不屬於任何其餘對象的屬性和方法,最終都是它的屬性和方法。事實上,沒有全局變量或全局函數;全部在全局做用域中定義的屬性和函數,都是Global對象的屬性。諸如isNaN()、isFinite()、parseInt()以及parseFloat(),實際上全都是Global對象的方法。除此以外Global對象還包含其餘一些方法。
a.URI編碼方法
Global對象的encodeURI()和encodeURIComponent()能夠對URI(Uniform Resource Identifiers,通用資源標識符)進行編碼,以便發送給瀏覽器。有效的URI中不能包含某些字符,例如空格。而這兩個URI編碼方法就能夠對URI進行編碼,它們用特殊的UTF-8編碼替換全部無效的字符,從而讓瀏覽器可以接受和理解。
使用encodeURI()編碼後的結果是除了空格以外的其餘字符都原封不動,只有空格被替換成了%20。而encodeURIComponent()方法則會使用對應的編碼替換全部非字母數字字符。
通常來講,咱們使用encodeURIComponent()方法的時候要比使用encodeURI()更多,由於在實踐中更常見的是對查詢字符串參數而不是對基礎URI進行編碼。
與encodeURI()和encodeURIComponent()方法對應的兩個方法分別是decodeURI()和decodeURIComponent()。
b.eval()方法
eval()方法就像是一個完整的ECMAScript解析器,它只接受一個參數,即要執行的ECMAScript字符串。當解析器發現代碼中調用eval()方法時,它會將傳入的參數當作實際的ECMAScript語句來解析,而後把執行結果插入到原位置。經過eval()執行的代碼被認爲是包含該次調用的執行環境的一部分,所以被執行的代碼具備與該執行環境相同的做用域鏈。
3.Global對象的屬性
特殊的值undefined、NaN、Infinity都是Global對象的屬性。全部原生引用類型的構造函數,像Object和Function,也都是Global對象的屬性。
ECMAScript5 明確禁止給undefined、NaN和Infinity賦值,這樣作即便在非嚴格模式下也會致使錯誤。
4.window對象
在全局做用域中聲明的全部變量和函數,就都成爲了window對象的屬性。
5.7.2 Math對象
a. min()/max()
min()/max():: 肯定一組數值中的最小值和最大值。這兩個方法均可以接收任意多個數值參數。
要找到數組中的最大或最小值,能夠像下面這樣使用apply()方法。
這個技巧的關鍵是把Math對象做爲apply()的第一個參數,從而正確地設置this值。而後,能夠將任何數組做爲第二個參數。
b. 舍入方法
Math.ceil():執行向上舍入,即它老是將數值向上舍入爲最接近的整數;
Math.floor():執行向下舍入,即它老是將數值向下舍入爲最接近的整數;
Math.round():執行標準攝入,即它老是將數值四捨五入爲最接近的整數。
Math.random()方法
Math.random():方法返回介於0和1之間的隨機數不包括0和1。
5.8 小結
Object是一個基礎類型,其餘全部類型都從Object繼承了基本的行爲;
Array類型是一組值的有序列表,同時還提供了操做和轉換這些值的功能;
Date類型提供了有關日期和時間的信息,包括當前日期和時間以及相關的計算功能;
RegExp類型是ECMAScript支持正則表達式的一個接口;
函數其實是Function類型的實例,所以函數也是對象;而這一點正是JS最有特點的地方。因爲函數是對象,因此函數也擁有方法,能夠用來加強其行爲。
由於有了基本包裝類型,因此JS中的基本類型值能夠被看成對象來訪問。三種基本包裝類型分別是:Boolean、Number和String。
每一個包裝類型都映射到同名的基本類型;
在讀取模式下訪問基本類型值時,就會建立對應的基本包裝類型的一個對象,從而方便了數據操做;
操做基本類型值的語句一經執行完畢,就會當即銷燬新建立的包裝對象。
在全部代碼執行以前,做用域中就已經存在兩個內置對象:Global和Math。