文章鏈接地址
String類型
String對象的方法也可以在所有基本的字符串值中訪問到,其中,繼承的 valueOf()、 toLocaleString() 和 toString() 方法,都是返回對象所表示的基本字符串值。String類型的每個實例都有 length 屬性,表示字符串中包含多少個字符。
- 字符方法
兩個用于訪問字符串中特定位置的方法是:charAt() 和 charCodeAt() 。這兩個方法都接受一個參數(shù),即基于0的字符位置。ECMA5可以使用方括號加數(shù)字索引來訪問字符串中特定字符。
- 字符串操作方法
第一個就是 concat() ,用于將一或多個字符串拼接起來,返回拼接得到的新字符串。還提供了三個基于子字符串創(chuàng)建字符串的方法:slice() 、substr() 和 substring() 。這三個方法都是返回被操作字符串的一個子字符串,slice() 和 substring() 的第二個參數(shù)指定的是子字符串最后一個字符后面的位置。而 substr() 的第二個參數(shù)指定的則是返回的字符個數(shù)。在傳遞給這些方法的參數(shù)是負值的情況下,它們的行為就不盡相同了。其中, slice() 方法會將傳入的負值與字符串的長度相加,substr() 方法將負的一個參數(shù)叫上字符串的長度,而將負的第二個參數(shù)轉換為0,最后,substring() 方法會把所有的負值參數(shù)都轉換為0。
- 字符串位置方法
有兩個可以從字符串中查找子字符串的方法:indexOf() 和 lastIndexOf() 。這兩個方法都是從一個字符串中搜索給定的子字符串,然后返子字符串的位置(如果沒有找到該子字符串,則返回 -1 )。這兩個方法的區(qū)別在于: indexOf() 方法從字符串的開頭向后搜索子字符串,而 lastIndexOf() 方法是從字符串的末尾向前搜索子字符串。這兩個方法都可以接收可選的第二個參數(shù),表示從字符串中的哪個位置開始搜索。換句話說, indexOf() 會從該參數(shù)指定的位置向后搜索,忽略該位置之前的所有字符;而 lastIndexOf() 則會從指定的位置向前搜索,忽略該位置之后的所有字符。
- trim() 方法
ECMAScript5為所有字符串定義了 trim() 方法。這個方法會創(chuàng)建一個字符串的副本,刪除前置及后綴的所有空格,然后返回結果。
- 字符串大小寫轉換方法
接下來我們要介紹的是一組與大小寫轉換有關的方法。ECMAScript中涉及字符串大小寫轉換的方法有4個:toLowerCase() 、 toLocaleLowerCase() 、 toUpperCase() 和 toLocaleUpperCase() 。其中, toLowerCase() 和 toUpperCase() 是兩個經典的方法,借鑒自 java.lang.String 中的同名方法。而 toLocaleLowerCase() 和 toLocaleUpperCase() 方法則是針對特定地區(qū)的實現(xiàn)。對有些地區(qū)來說,針對地區(qū)的方法與其通用方法得到的結果相同,但少數(shù)語言(如土耳其語)會為 Unicode 大小寫轉換應用特殊的規(guī)則,這時候就必須使用針對地區(qū)的方法來保證實現(xiàn)正確的轉換。
- 字符串的模式匹配方法
String 類型定義了幾個用于在字符串中匹配模式的方法。第一個方法就是 match() ,在字符串上調用這個方法,本質上與調用 RegExp 的 exec() 方法相同。 match() 方法只接受一個參數(shù),要么是一個正則表達式,要么是一個 RegExp 對象。
另一個用于查找模式的方法是 search() 。這個方法的唯一參數(shù)與 match() 方法的參數(shù)相同:由字符串或 RegExp 對象指定的一個正則表達式。 search() 方法返回字符串中第一個匹配項的索引;如果沒有找到匹配項,則返回 -1 。而且, search() 方法始終是從字符串開頭向后查找模式。
為了簡化替換子字符串的操作,ECMAScript提供了 replace() 方法。這個方法接受兩個參數(shù):第一個參數(shù)可以是一個 RegExp 對象或者一個字符串(這個字符串不會被轉換成正則表達式),第二個參數(shù)可以是一個字符串或者一個函數(shù)。如果第一個參數(shù)是字符串,那么只會替換第一個子字符串。要想替換所有子字符串,唯一的辦法就是提供一個正則表達式,而且要指定全局( g )標志
- localeCompare() 方法
與操作字符串有關的最后一個方法是 localeCompare() ,這個方法比較兩個字符串,并返回下列值中的一個:
如果字符串在字母表中應該排在字符串參數(shù)之前,則返回一個負數(shù)(大多數(shù)情況下是 -1 ,具體的值要視實現(xiàn)而定);
如果字符串等于字符串參數(shù),則返回 0 ;
如果字符串在字母表中應該排在字符串參數(shù)之后,則返回一個正數(shù)(大多數(shù)情況下是 1 ,具體的值同樣要視實現(xiàn)而定)。
- fromCharCode() 方法
另外, String 構造函數(shù)本身還有一個靜態(tài)方法: fromCharCode() 。這個方法的任務是接收一或多個字符編碼,然后將它們轉換成一個字符串。從本質上來看,這個方法與實例方法 charCodeAt() 執(zhí)行的是相反的操作。
- ES6方法
ES6 提供了codePointAt方法,能夠正確處理4個字節(jié)儲存的字符,返回一個字符的碼點。
ES6 為字符串添加了遍歷器接口,使得字符串可以被 for...of 循環(huán)遍歷。
ES6 有一個提案,提出字符串實例的at方法,可以識別 Unicode 編號大于0xFFFF的字符,返回正確的字符。
ES6 提供字符串實例的 normalize() 方法,用來將字符的不同表示方法統(tǒng)一為同樣的形式,這稱為 Unicode 正規(guī)化。
傳統(tǒng)上,JavaScript只有 indexOf 方法,可以用來確定一個字符串是否包含在另一個字符串中。ES6又提供了三種新方法。
includes():返回布爾值,表示是否找到了參數(shù)字符串。
startsWith():返回布爾值,表示參數(shù)字符串是否在源字符串的頭部。
endsWith():返回布爾值,表示參數(shù)字符串是否在源字符串的尾部。
repeat 方法返回一個新字符串,表示將原字符串重復n次。
ES2017 引入了字符串補全長度的功能。如果某個字符串不夠指定長度,會在頭部或尾部補全。padStart() 用于頭部補全,padEnd() 用于尾部補全。
Array類型
- 棧方法
push() 方法可以接收任意數(shù)量的參數(shù),把它們逐個添加到數(shù)組末尾,并返回修改后數(shù)組的長度。而 pop() 方法則從數(shù)組末尾移除最后一項,減少數(shù)組的 length 值,然后返回移除的項。
- 隊列方法
由于 push() 是向數(shù)組末端添加項的方法,因此要模擬隊列只需一個從數(shù)組前端取得項的方法。實現(xiàn)這一操作的數(shù)組方法就是 shift() ,它能夠移除數(shù)組中的第一個項并返回該項,同時將數(shù)組長度減1。 ECMAScript還為數(shù)組提供了一個 unshift() 方法。顧名思義, unshift() 與 shift() 的用途相反:它能在數(shù)組前端添加任意個項并返回新數(shù)組的長度。
- 重排方法
reverse() 方法會對反轉數(shù)組項的順序。 在默認情況下, sort() 方法按升序排列數(shù)組項——即最小的值位于最前面,最大的值排在最后面。為了實現(xiàn)排序, sort() 方法會調用每個數(shù)組項的 toString() 轉型方法,然后比較得到的字符串,以確定如何排序。即使數(shù)組中的每一項都是數(shù)值, sort() 方法比較的也是字符串。 因此 sort() 方法可以接收一個比較函數(shù)作為參數(shù),以便我們指定哪個值位于哪個值的前面。比較函數(shù)接收兩個參數(shù),如果第一個參數(shù)應該位于第二個之前則返回一個負數(shù),如果兩個參數(shù)相等則返回0,如果第一個參數(shù)應該位于第二個之后則返回一個正數(shù)。
- 操作方法
concat() 方法可以基于當前數(shù)組中的所有項創(chuàng)建一個新數(shù)組。具體來說,這個方法會先創(chuàng)建當前數(shù)組一個副本,然后將接收到的參數(shù)添加到這個副本的末尾,最后返回新構建的數(shù)組。在沒有給 concat() 方法傳遞參數(shù)的情況下,它只是復制當前數(shù)組并返回副本。如果傳遞給 concat() 方法的是一或多個數(shù)組,則該方法會將這些數(shù)組中的每一項都添加到結果數(shù)組中。如果傳遞的值不是數(shù)組,這些值就會被簡單地添加到結果數(shù)組的末尾。
下一個方法是 slice() ,它能夠基于當前數(shù)組中的一或多個項創(chuàng)建一個新數(shù)組。 slice() 方法可以接受一或兩個參數(shù),即要返回項的起始和結束位置。在只有一個參數(shù)的情況下, slice() 方法返回從該參數(shù)指定位置開始到當前數(shù)組末尾的所有項。如果有兩個參數(shù),該方法返回起始和結束位置之間的項——但不包括結束位置的項。注意, slice() 方法不會影響原始數(shù)組。
如果 slice() 方法的參數(shù)中有一個負數(shù),則用數(shù)組長度加上該數(shù)來確定相應的位置。例如,在一個包含5項的數(shù)組上調用 slice(-2,-1) 與調用 slice(3,4) 得到的結果相同。如果結束位置小于起始位置,則返回空數(shù)組。
下面我們來介紹 splice() 方法,這個方法恐怕要算是最強大的數(shù)組方法了,它有很多種用法。 splice() 的主要用途是向數(shù)組的中部插入項,但使用這種方法的方式則有如下3種。
刪除:可以刪除任意數(shù)量的項,只需指定2個參數(shù):要刪除的第一項的位置和要刪除的項數(shù)。例如, splice(0,2) 會刪除數(shù)組中的前兩項。
插入:可以向指定位置插入任意數(shù)量的項,只需提供3個參數(shù):起始位置、0(要刪除的項數(shù))和要插入的項。如果要插入多個項,可以再傳入第四、第五,以至任意多個項。例如, splice(2,0,“red”,“green”) 會從當前數(shù)組的位置2開始插入字符串 “red” 和 “green” 。
替換:可以向指定位置插入任意數(shù)量的項,且同時刪除任意數(shù)量的項,只需指定3個參數(shù):起始位置、要刪除的項數(shù)和要插入的任意數(shù)量的項。插入的項數(shù)不必與刪除的項數(shù)相等。例如, splice (2,1,“red”,“green”) 會刪除當前數(shù)組位置2的項,然后再從位置2開始插入字符串 “red” 和 “green” 。
- 位置方法
ECMAScript 5為數(shù)組實例添加了兩個位置方法: indexOf() 和 lastIndexOf() 。這兩個方法都接收兩個參數(shù):要查找的項和(可選的)表示查找起點位置的索引。其中, indexOf() 方法從數(shù)組的開頭(位置0)開始向后查找, lastIndexOf() 方法則從數(shù)組的末尾開始向前查找。
使用 indexOf() 和 lastIndexOf() 方法查找特定項在數(shù)組中的位置非常簡單,支持它們的瀏覽器包括IE9+、Firefox 2+、Safari 3+、Opera 9.5+和Chrome。
- 迭代方法
ECMAScript 5為數(shù)組定義了5個迭代方法。每個方法都接收兩個參數(shù):要在每一項上運行的函數(shù)和(可選的)運行該函數(shù)的作用域對象——影響 this 的值。傳入這些 方法中的函數(shù)會接收三個參數(shù):數(shù)組項的值、該項在數(shù)組中的位置和數(shù)組對象本身。根據(jù)使用的方法不同,這個函數(shù)執(zhí)行后的返回值可能會也可能不會影響訪問的返回值。以下是這5個迭代方法的作用。
every() :對數(shù)組中的每一項運行給定函數(shù),如果該函數(shù)對每一項都返回 true ,則返回 true 。
filter() :對數(shù)組中的每一項運行給定函數(shù),返回該函數(shù)會返回 true 的項組成的數(shù)組。
forEach() :對數(shù)組中的每一項運行給定函數(shù)。這個方法沒有返回值。
map() :對數(shù)組中的每一項運行給定函數(shù),返回每次函數(shù)調用的結果組成的數(shù)組。
some() :對數(shù)組中的每一項運行給定函數(shù),如果該函數(shù)對任一項返回 true ,則返回 true 。 *這些數(shù)組方法通過執(zhí)行不同的操作,可以大大方便處理數(shù)組的任務。支持這些迭代方法的瀏覽器有IE9+、Firefox 2+、Safari 3+、Opera 9.5+和Chrome。
- 歸并方法
ECMAScript 5還新增了兩個縮小數(shù)組的方法: reduce() 和 reduceRight() 。這兩個方法都會迭代數(shù)組的所有項,然后構建一個最終返回的值。其中, reduce() 方法從數(shù)組的第一項開始,逐個遍歷到最后。而 reduceRight() 則從數(shù)組的最后一項開始,向前遍歷到第一項。
- ES6方法
擴展運算符(spread)是三個點(...)。它好比 rest 參數(shù)的逆運算,將一個數(shù)組轉為用逗號分隔的參數(shù)序列。
Array.from 方法用于將兩類對象轉為真正的數(shù)組:類似數(shù)組的對象(array-like object)和可遍歷(iterable)的對象(包括ES6新增的數(shù)據(jù)結構Set和Map)。
Array.of 方法用于將一組值,轉換為數(shù)組。
數(shù)組實例的 find 方法,用于找出第一個符合條件的數(shù)組成員。它的參數(shù)是一個回調函數(shù),所有數(shù)組成員依次執(zhí)行該回調函數(shù),直到找出第一個返回值為true的成員,然后返回該成員。如果沒有符合條件的成員,則返回 undefined 。
數(shù)組實例的 findIndex 方法的用法與 find 方法非常類似,返回第一個符合條件的數(shù)組成員的位置,如果所有成員都不符合條件,則返回-1。
fill 方法使用給定值,填充一個數(shù)組。
ES6 提供三個新的方法——entries(),keys() 和 values()——用于遍歷數(shù)組。它們都返回一個遍歷器對象,可以用 for...of 循環(huán)進行遍歷,唯一的區(qū)別是 keys() 是對鍵名的遍歷、values() 是對鍵值的遍歷,entries() 是對鍵值對的遍歷。
Array.prototype.includes 方法返回一個布爾值,表示某個數(shù)組是否包含給定的值,與字符串的 includes 方法類似。ES2016 引入了該方法。
數(shù)組的空位指,數(shù)組的某一個位置沒有任何值。比如,Array構造函數(shù)返回的數(shù)組都是空位。
Object類型
- Object的每個實例都具有下列屬性和方法
Constructor :保存著用于創(chuàng)建當前對象的函數(shù)。
hasOwnProperty(propertyName) :用于檢查給定的屬性在當前對象實例中(而不是在實例的原型中)是否存在。其中,作為參數(shù)的屬性名( propertyName )必須以字符串形式指定(例如: o.hasOwnProperty(“name”) )。
isPrototypeOf(object) :用于檢查傳入的對象是否是另一個對象的原型。
propertyIsEnumerable(propertyName) :用于檢查給定的屬性是否能夠使用 for-in 語句(本章后面將會討論)來枚舉。與 hasOwnProperty() 方法一樣,作為參數(shù)的屬性名必須以字符串形式指定。
toLocaleString() :返回對象的字符串表示,該字符串與執(zhí)行環(huán)境的地區(qū)對應。
toString() :返回對象的字符串表示。
valueOf() :返回對象的字符串、數(shù)值或布爾值表示。通常與 toString() 方法的返回值相同。
- ECMAScript中有兩種屬性:數(shù)據(jù)屬性和訪問器屬性。
要修改屬性默認的特性,必須使用ECMAScript 5的 Object.defineProperty() 方法。這個方法接收三個參數(shù):屬性所在的對象、屬性的名字和一個描述符對象。其中,描述符(descriptor)對象的屬性必須是: configurable 、 enumerable 、 writable 和 value 。設置其中的一或多個值,可以修改對應的特性值。
由于為對象定義多個屬性的可能性很大,ECMAScript 5又定義了一個 Object.defineProperties() 方法。利用這個方法可以通過描述符一次定義多個屬 性。這個方法接收兩個對象參數(shù):第一個對象是要添加和修改其屬性的對象,第二個對象的屬性與第一個對象中要添加或修改的屬性一一對應。
使用ECMAScript 5的 Object.getOwnPropertyDescriptor() 方法,可以取得給定屬性的描述符。這個方法接收兩個參數(shù):屬性所在的對象和要讀取其描述符的屬性名稱。返回值是一個對象,如果是訪問器屬性,這個對象的屬性有 configurable 、 enumerable 、 get 和 set ;如果是數(shù)據(jù)屬性,這個對象的屬性有 configurable 、 enumerable 、 writable 和 value 。
- ES6方法
ES6 允許直接寫入變量和函數(shù),作為對象的屬性和方法。
ES6 提出“Same-value equality”(同值相等)算法,用來解決這個問題。Object.is 就是部署這個算法的新方法。它用來比較兩個值是否嚴格相等,與嚴格比較運算符(===)的行為基本一致。
Object.assign 方法用于對象的合并,將源對象(source)的所有可枚舉屬性,復制到目標對象(target)。
proto 屬性(前后各兩個下劃線),用來讀取或設置當前對象的 prototype 對象。目前,所有瀏覽器(包括 IE11)都部署了這個屬性。
Object.setPrototypeOf 方法的作用與 proto 相同,用來設置一個對象的 prototype 對象,返回參數(shù)對象本身。它是 ES6 正式推薦的設置原型對象的方法。
Object.getPrototypeOf() 該方法與 Object.setPrototypeOf 方法配套,用于讀取一個對象的原型對象。
Object.values 方法返回一個數(shù)組,成員是參數(shù)對象自身的(不含繼承的)所有可遍歷(enumerable)屬性的鍵值。
Object.entries 方法返回一個數(shù)組,成員是參數(shù)對象自身的(不含繼承的)所有可遍歷(enumerable)屬性的鍵值對數(shù)組。
擴展運算符(...)用于取出參數(shù)對象的所有可遍歷屬性,拷貝到當前對象之中。
在GitHub上閱讀原文