第五章=》引用类型
第五章? 引用類型
????? 引用類型的值(對象)是引用類型的一個實例。在ECMAScript中,引用類型是一種數據結構,用于將數據和功能組織在一起。引用類型有時候也被稱為對象定義,因為他們描述的是一類對象所具有的屬性和方法。
5.1 Object類型
????? ?5.1.1創建Object實例的方式有兩種
????? ?????????a.使用new操作符后跟Object構造函數
????? ?????????var ?person = new Object();
?????? ????????b.對象字面量表示法
?????? ????????var? person = { name:”111”,age:22 };
?????? ????????在通過對象字面量定義對象時,實際上不會調用Object構造函數。
?????? ????????對象字面量也是向函數傳遞大量可選參數的首選方式。
? ? ? ? 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。 ?
?
轉載于:https://www.cnblogs.com/zhaixingpengyue/p/8322426.html
總結
- 上一篇: USACO-Section1.4 Ski
- 下一篇: redis使用watch完成秒杀抢购功能