當將 String 作為函數(shù)調(diào)用,而不是作為構(gòu)造器,它執(zhí)行一個類型轉(zhuǎn)換。
返回一個由 ToString(value) 計算出的字符串值(不是 String 對象)。如果沒有提供 value,返回空字符串 ""。
當 String 作為一個 new 表達式的一部分被調(diào)用,它是個構(gòu)造器:它初始化新創(chuàng)建的對象。
新構(gòu)造對象的 [[Prototype]] 內(nèi)部屬性設定為標準內(nèi)置的字符串原型對象,它是 String.prototype 的初始值 (15.5.3.1)。
新構(gòu)造對象的 [[Class]] 內(nèi)部屬性設定為 "String"。
新構(gòu)造對象的 [[Extensible]] 內(nèi)部屬性設定為 true。
新構(gòu)造對象的 [[PrimitiveValue]] 內(nèi)部屬性設定為 ToString(value),或如果沒提供 value 則設定為空字符串。
String 構(gòu)造器的 [[Prototype]] 內(nèi)部屬性的值是標準內(nèi)置的函數(shù)原型對象 (15.3.4).
除了內(nèi)部屬性和 length 屬性(值為 1)之外,String 構(gòu)造器還有以下屬性:
String.prototype 的初始值是標準內(nèi)置的字符串原型對象 (15.5.4)。
這個屬性有特性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。
返回一個字符串值,包含的字符數(shù)與參數(shù)數(shù)目相同。每個參數(shù)指定返回字符串中的一個字符,也就是說第一個參數(shù)第一個字符,以此類推(從左到右)。一個參數(shù)轉(zhuǎn)換為一個字符,通過先應用 ToUint16 (9.7) 操作,再將返回的 16 位整數(shù)看作字符的代碼單元值。如果沒提供參數(shù),返回空字符串。
fromCharCode 函數(shù)的 length 屬性是 1。
字符串原型對象本身是一個值為空字符串的 String 對象(它的 [[Class]] 是 "String")。
字符串原型對象的 [[Prototype]] 內(nèi)部屬性值是標準內(nèi)置的 Object 原型對象 (15.2.4)。
String.prototype.constructor 的初始值是內(nèi)置 String 構(gòu)造器。
返回 this 字符串值。(注,對于一個 String 對象,toString 方法和 valueOf 方法返回相同值。)
toString 函數(shù)是非通用的 ; 如果它的 this 值不是一個字符串或字符串對象,則拋出一個 TypeError 異常。因此它不能作為方法轉(zhuǎn)移到其他類型對象上。
返回 this 字符串值。
valueOf 函數(shù)是非通用的 ; 如果它的 this 值不是一個字符串或字符串對象,則拋出一個 TypeError 異常。因此它不能作為方法轉(zhuǎn)移到其他類型對象上。
將 this 對象轉(zhuǎn)換為一個字符串,返回包含了這個字符串 pos 位置的字符的字符串。如果那個位置沒有字符,返回空字符串。返回結(jié)果是個字符串值,不是字符串對象。
如果 pos 是一個數(shù)字類型的整數(shù)值,則 x.charAt( pos) 與 x.substring( pos, pos+1) 的結(jié)果相等。
當用一個參數(shù) pos 調(diào)用 charAt 方法,采用以下步驟:
charAt 函數(shù)被有意設計成通用的;它不要求它的 this 值是字符串對象。因此,他可以當做方法轉(zhuǎn)移到其他類型對象。
將 this 對象轉(zhuǎn)換為一個字符串,返回一個代表這個字符串 pos 位置字符的代碼單元值的數(shù)字(小于 216 的非負整數(shù))。如果那個位置沒有字符,返回 NaN。
當用一個參數(shù) pos 調(diào)用 charCodeAt 方法,采用以下步驟:
charCodeAt 函數(shù)被有意設計成通用的;它不要求它的 this 值是字符串對象。因此,他可以當做方法轉(zhuǎn)移到其他類型對象。
當用一個或更多參數(shù) string1, string2, 等等 , 調(diào)用 concat 方法 , 它返回一個包含了 --this 對象(轉(zhuǎn)換為一個字符串)中的字符們和后面跟著的每個 string1, string2, 等等,(每個參數(shù)都轉(zhuǎn)換為字符串)里的字符們 -- 的字符串。返回結(jié)果是一個字符串值,不是一個字符串對象。采用以下步驟:
concat 方法的 length 屬性是 1.
concat 函數(shù)被有意設計成通用的;它不要求它的 this 值是字符串對象。因此,他可以當做方法轉(zhuǎn)移到其他類型對象。
將 this 對象轉(zhuǎn)換為一個字符串,如果 searchString 在這個字符串里大于或等于 position 的位置中的一個或多個位置使它呈現(xiàn)為字符串的子串,那么返回這些位置中最小的索引;否則返回 -1。如果 position 是 undefined,就認為它是 0,以搜索整個字符串。
indexOf 需要兩個參數(shù) searchString 和 position,執(zhí)行以下步驟:
indexOf 的 length 屬性是 1。
indexOf 函數(shù)被有意設計成通用的;它不要求它的 this 值是字符串對象。因此,他可以當做方法轉(zhuǎn)移到其他類型對象。
將 this 對象轉(zhuǎn)換為一個字符串,如果 searchString 在這個字符串里小于或等于 position 的位置中的一個或多個位置使它呈現(xiàn)為字符串的子串,那么返回這些位置中最大的索引;否則返回 -1。如果 position 是 undefined,就認為它是字符串值的長度,以搜索整個字符串。
lastIndexOf 需要兩個參數(shù) searchString 和 position,執(zhí)行以下步驟:
lastIndexOf 的 length 屬性是 1。
lastIndexOf 函數(shù)被有意設計成通用的;它不要求它的 this 值是字符串對象。因此,他可以當做方法轉(zhuǎn)移到其他類型對象。
當以一個參數(shù) that 來調(diào)用 localeCompare 方法,它返回一個非 NaN 數(shù)字值,這個數(shù)字值反應了對 this 值(轉(zhuǎn)換為字符串)和 that 值(轉(zhuǎn)換為字符串)進行語言環(huán)境敏感的字符串比較的結(jié)果。兩個字符串 S 和 That 用實現(xiàn)定義的一種方式進行比較。比較結(jié)果是為了按照系統(tǒng)默認語言環(huán)境指定的排列順序來排列字符串,根據(jù)按照排列順序 S 是在 That 前面,相同,還是 S 在 That 后面,結(jié)果分別是負數(shù),零,正數(shù)。
在執(zhí)行比較之前執(zhí)行以下步驟以預備好字符串:
如果將 localeCompare 方法看做是將 this 和 that 作為兩個參數(shù)的函數(shù),那么它是在所有字符串集合上的保持一致的比較函數(shù)(在 15.4.4.11 定義)。
實際返回值是實現(xiàn)定義的,允許實現(xiàn)者們在返回值里編碼附加信息。但是函數(shù)需要定義一個在所有字符串上的總的順序,并且,當比較的字符串們被認為是 Unicode 標準定義的標準等價,則返回 0。
如果宿主環(huán)境沒有在所有字符串上語言敏感的比較,此函數(shù)可執(zhí)行按位比較。
localeCompare 方法自身不適合直接作為 Array.prototype.sort 的參數(shù),因為后者需要的是兩個參數(shù)的函數(shù)。
這個函數(shù)的目的是在宿主環(huán)境中任何依靠語言敏感的比較方式都可用于 ECMAScript 環(huán)境,并根據(jù)宿主環(huán)境當前語言環(huán)境設置的規(guī)則進行比較。強烈建議這個函數(shù)將 -- 根據(jù) Unicode 標準的標準等價的 -- 字符串當做是相同的(也就是說,要比較的字符串仿佛是都先被轉(zhuǎn)換為正?;问?C 或正?;问?D 了)。還建議這個函數(shù)不履行 Unicode 相容等價或分解。
本標準的未來版本可能會使用這個函數(shù)的第二個參數(shù);建議實現(xiàn)不將這個參數(shù)位用作其他用途。
localeCompare 函數(shù)被有意設計成通用的;它不要求它的 this 值是字符串對象。因此,他可以當做方法轉(zhuǎn)移到其他類型對象。
當以 regexp 作為參數(shù)調(diào)用 match 方法,采用以下步驟:
match 函數(shù)被有意設計成通用的;它不要求它的 this 值是字符串對象。因此,他可以當做方法轉(zhuǎn)移到其他類型對象。
首先根據(jù)以下步驟設定 string:
如果 searchValue 是一個正則表達式([[Class]] 內(nèi)部屬性是 "RegExp" 的對象),按照如下執(zhí)行:如果 searchValue.global 是 false,則搜索 string,找出匹配正則表達式 searchValue 的第一個子字符串。如果 searchValue.global 是 true,則搜索 string,找出匹配正則表達式 searchValue 的所有子字符串。搜索的做法與 String.prototype.match 相同,包括對 searchValue.lastIndex 的更新。令 m 為 searchValue 的左捕獲括號的個數(shù)(使用 15.10.2.1 指定的 NcapturingParens)。
如果 searchValue 不是正則表達式,令 searchString 為 ToString(searchValue),并搜索 string,找出第一個出現(xiàn)的 searchString 的子字符串。令 m 為 0。
如果 replaceValue 是函數(shù),則對每個匹配的子字符串,以 m + 3 個參數(shù)調(diào)用這個函數(shù)。第一個參數(shù)是匹配的子字符串。如果 searchValue 是正則表達式,接下來 m 個參數(shù)是 MatchResult(見 15.10.2.1)里的所有捕獲值。第 m + 2 個參數(shù)是發(fā)生的匹配在 string 里的偏移量,第 m + 3 個參數(shù)是 string。結(jié)果是將輸入的原字符串里的每個匹配子字符串替換為相應函數(shù)調(diào)用的返回值(必要的情況下轉(zhuǎn)換為字符串)得到的字符串。
否則,令 newstring 表示 replaceValue 轉(zhuǎn)換為字符串的結(jié)果。結(jié)果是將輸入的原字符串里的每個匹配子字符串替換為 -- 將 newstring 里的字符替換為表 22 指定的替代文本得到的字符串 -- 得到的字符串。替換這些 $ 是由左到右進行的,并且一旦執(zhí)行了這樣的替換,新替換的文本不受進一步替換。例如 ,"$1,$2".replace(/(\$(\d))/g, "$$1-$1$2") 返回 "$1-$11,$1-$22"。newstring 里的一個 $ ,如果不符合以下任何格式,就保持原狀。
替代文本符號替換字符編碼值 | 表示 |
---|---|
字符 | 替代文本 |
$$ | $ |
$& | 匹配到的子字符串 |
$`( 譯注:'\u0060') | string 中匹配到的子字符串之前部分。 |
$'( 譯注:'\u0027') | string 中匹配到的子字符串之后部分。 |
$n | 第 n 個捕獲結(jié)果,n 是范圍在 1 到 9 的單個數(shù)字,并且緊接著 $n 后面的不是十進制數(shù)字。如果 n≤m 且第 n 個捕獲結(jié)果是 undefined,就用空字符串代替。如果 n>m,結(jié)果是實現(xiàn)定義的。 |
$nn | 第 nn 個捕獲結(jié)果,nn 是范圍在 01 到 99 的十進制兩位數(shù)。如果 nn≤m 且第 nn 個捕獲結(jié)果是 undefined,就用空字符串代替。如果 nn>m,結(jié)果是實現(xiàn)定義的。 |
replace 函數(shù)被有意設計成通用的;它不要求它的 this 值是字符串對象。因此,他可以當做方法轉(zhuǎn)移到其他類型對象。
當用參數(shù) regexp 調(diào)用 search 方法,采用以下步驟:
search 函數(shù)被有意設計成通用的;它不要求它的 this 值是字符串對象。因此,他可以當做方法轉(zhuǎn)移到其他類型對象。
slice 方法需要兩個參數(shù) start 和 end,將 this 對象轉(zhuǎn)換為一個字符串,返回這個字符串中從 start 位置的字符到(但不包含)end 位置的字符的一個子字符串(或如果 end 是 undefined,就直接到字符串尾部)。用 sourceLength 表示字符串長度,如果 start 是負數(shù),就把它看做是 sourceLength+start;如果 end 是負數(shù),就把它看做是 sourceLength+end。返回結(jié)果是一個字符串值,不是字符串對象。采用以下步驟:
slice 方法的 length 屬性是 2。
slice 函數(shù)被有意設計成通用的;它不要求它的 this 值是字符串對象。因此,他可以當做方法轉(zhuǎn)移到其他類型對象。
將 this 字符串轉(zhuǎn)換為一個字符串,返回一個數(shù)組對象,里面存儲了這個字符串的子字符串。子字符串是從左到右搜索 separator 的匹配來確定的;這些匹配結(jié)果不成為返回數(shù)組的任何子字符串元素,但被用來分割字符串。separator 的值可以是一個任意長度的字符串,也可以是一個正則對象(即,一個 [[Class]] 內(nèi)部屬性為 "RegExp" 的對象;見 15.10)。
separator 值可以是一個空字符串,一個空正則表達式,或一個可匹配空字符串的正則表達式。這種情況下,separator 不匹配輸入字符串開頭和末尾的空的子串,也不匹配分隔符的之前匹配結(jié)果末尾的空字串。(例如,如果 separator 是空字符串,要將字符串分割為單個字符們;結(jié)果數(shù)組的長度等于字符串長度,且每個字串都包含一個字符。)如果 separator 是正則表達式,在 this 字符串的給定位置中只考慮首次匹配結(jié)果,即使如果在這個位置上回溯可產(chǎn)生一個非空的子串。(例如,"ab".split(/a*?/) 的執(zhí)行結(jié)果是數(shù)組 ["a","b"],而 "ab".split(/a*/) 的執(zhí)行結(jié)果是數(shù)組 ["","b"] 。)
如果 this 對象是(或轉(zhuǎn)換成)空字符串,返回的結(jié)果取決于 separator 是否可匹配空字符串。如果可以,結(jié)果是不包含任何元素的數(shù)組。否則,結(jié)果是包含一個空字符串元素的數(shù)組。
如果 separator 是包含捕獲括號的正則表達式,則對 separator 的每次匹配,捕獲括號的結(jié)果 ( 包括 undefined) 都拼接為輸出數(shù)組。例如,
"Aboldand coded
".split(/<(\/)?([^<>]+)>/)
執(zhí)行結(jié)果是數(shù)組:
["A", undefined, "B", "bold", "/", "B", "and", undefined, "CODE", "coded", "/", "CODE", ""]
如果 separator 是 undefined,則返回結(jié)果是只包含 this 值(轉(zhuǎn)換為字符串)一個字符串元素的數(shù)組。如果 limit 不是 undefined,則輸出數(shù)組被切斷為包含不大于 limit 個元素。
當調(diào)用 split 方法,采用以下步驟:
SplitMatch 抽象操作需要三個參數(shù),字符串 S,整數(shù) q,字符串或正則對象 R,按照以下順序執(zhí)行并返回一個 MatchResult(見 15.10.2.1):
split 方法的 length 屬性是 2.
分隔符是正則對象時,split 方法忽略 separator.global 的值。
split 函數(shù)被有意設計成通用的;它不要求它的 this 值是字符串對象。因此,他可以當做方法轉(zhuǎn)移到其他類型對象。
substring 方法需要兩個參數(shù) start 和 end,將 this 對象轉(zhuǎn)換為一個字符串,返回包含 -- 在轉(zhuǎn)換結(jié)果字符串中從 start 位置字符一直到(但不包括)end 位置的字符(或如果 end 是 undefined,就到字符串末尾)-- 的一個子串。返回結(jié)果是字符串值,不是字符串對象。
如果任一參數(shù)是 NaN 或負數(shù),它被零取代;如果任一參數(shù)大于字符串長度,它被字符串長度取代。
如果 start 大于 end,交換它們的值。
采用以下步驟:
substring 方法的 length 屬性是 2。
substring 函數(shù)被有意設計成通用的;它不要求它的 this 值是字符串對象。因此,他可以當做方法轉(zhuǎn)移到其他類型對象。
采用以下步驟:
為了此操作,字符串的 16 位代碼單元被看作是 Unicode 基本多文種平面(Basic Multilingual Plane)中的代碼點。代理代碼點直接從 S 轉(zhuǎn)移到 L,不做任何映射。
返回結(jié)果必須是根據(jù) Unicode 字符數(shù)據(jù)庫里的大小寫映射得到的(對此數(shù)據(jù)庫明確規(guī)定,不僅包括 UnicodeData.txt 文件,而且還包括 Unicode 2.1.8 和更高版本里附帶的 SpecialCasings.txt 文件)。
某些字符的大小寫映射可產(chǎn)生多個字符。這種情況下結(jié)果字符串與原字符串的長度未必相等。因為 toUpperCase 和 toLowerCase 都有上下文敏感的行為,所以這倆函數(shù)不是對稱的。也就是說,s.toUpperCase().toLowerCase() 不一定等于 s.toLowerCase()。
toLowerCase 函數(shù)被有意設計成通用的;它不要求它的 this 值是字符串對象。因此,他可以當做方法轉(zhuǎn)移到其他類型對象。
此函數(shù)產(chǎn)生依照 -- 宿主環(huán)境的當前語言設置 -- 更正的結(jié)果,而不是獨立于語言環(huán)境的結(jié)果,除此之外它的運作方式與 toLowerCase 完全一樣。只有在少數(shù)情況下有一個區(qū)別(如,土耳其語),就是那個語言和正規(guī) Unicode 大小寫映射有沖突時的規(guī)則。
此函數(shù)的第一個參數(shù)可能會用于本標準的未來版本 ; 建議實現(xiàn)不以任何用途使用這個參數(shù)位置。
toLocaleLowerCase 函數(shù)被有意設計成通用的;它不要求它的 this 值是字符串對象。因此,他可以當做方法轉(zhuǎn)移到其他類型對象。
此函數(shù)的將字符映射到在 Unicode 字符數(shù)據(jù)庫中與其等值的大寫字符,除此之外此函數(shù)的行為采用與 String.prototype.toLowerCase 完全相同的方式。
toUpperCase 函數(shù)被有意設計成通用的;它不要求它的 this 值是字符串對象。因此,他可以當做方法轉(zhuǎn)移到其他類型對象。
此函數(shù)產(chǎn)生依照 -- 宿主環(huán)境的當前語言設置 -- 更正的結(jié)果,而不是獨立于語言環(huán)境的結(jié)果,除此之外它的運作方式與 toUpperCase 完全一樣。只有在少數(shù)情況下有一個區(qū)別(如,土耳其語),就是那個語言和正規(guī) Unicode 大小寫映射有沖突時的規(guī)則。
此函數(shù)的第一個參數(shù)可能會用于本標準的未來版本 ; 建議實現(xiàn)不以任何用途使用這個參數(shù)位置。
toLocaleUpperCase 函數(shù)被有意設計成通用的;它不要求它的 this 值是字符串對象。因此,他可以當做方法轉(zhuǎn)移到其他類型對象。
采用以下步驟:
trim 函數(shù)被有意設計成通用的;它不要求它的 this 值是字符串對象。因此,他可以當做方法轉(zhuǎn)移到其他類型對象。
字符串實例從字符串原型對象繼承屬性,字符串實例的 [[Class]] 內(nèi)部屬性值是 "String"。字符串實例還有 [[PrimitiveValue]] 內(nèi)部屬性,length 屬性,和一組屬性名是數(shù)組索引的可遍歷屬性。
[[PrimitiveValue]] 內(nèi)部屬性是代表這個字符串對象的字符串值。以數(shù)組索引命名的屬性對應字符串值里的單字符。一個特殊的 [[GetOwnProperty]] 內(nèi)部方法用來為數(shù)組索引命名的屬性指定數(shù)字,值,和特性。
在代表這個字符串對象的字符串值里的字符數(shù)。
一旦創(chuàng)建了一個字符串對象,這個屬性是不可變的。它有特性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。
數(shù)組對象使用一個,用在其他原生 ECMAscript 對象的 [[GetOwnProperty]] 內(nèi)部方法 (8.12.1) 的變化版。這個特殊內(nèi)部方法用來給命名屬性添加訪問器,對應到字符串對象的單字符。
設 S 為一個字符串對象,P 為一個字符串。
當以屬性名 P 調(diào)用 S 的 [[GetOwnProperty]] 內(nèi)部方法,采用以下步驟:
更多建議: