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