String 對象

2018-06-16 15:46 更新

作為函數(shù)調(diào)用 String 構(gòu)造器

 當將 String 作為函數(shù)調(diào)用,而不是作為構(gòu)造器,它執(zhí)行一個類型轉(zhuǎn)換。

String ( [ value ] )

 返回一個由 ToString(value) 計算出的字符串值(不是 String 對象)。如果沒有提供 value,返回空字符串 ""。

String 構(gòu)造器

 當 String 作為一個 new 表達式的一部分被調(diào)用,它是個構(gòu)造器:它初始化新創(chuàng)建的對象。

new String ( [ value ] )

 新構(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)造器的屬性

 String 構(gòu)造器的 [[Prototype]] 內(nèi)部屬性的值是標準內(nèi)置的函數(shù)原型對象 (15.3.4).

 除了內(nèi)部屬性和 length 屬性(值為 1)之外,String 構(gòu)造器還有以下屬性:

String.prototype

 String.prototype 的初始值是標準內(nèi)置的字符串原型對象 (15.5.4)。

 這個屬性有特性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。

String.fromCharCode ( [ char0 [ , char1 [ , … ] ] ] )

 返回一個字符串值,包含的字符數(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

 String.prototype.constructor 的初始值是內(nèi)置 String 構(gòu)造器。

String.prototype.toString ( )

 返回 this 字符串值。(注,對于一個 String 對象,toString 方法和 valueOf 方法返回相同值。)

 toString 函數(shù)是非通用的 ; 如果它的 this 值不是一個字符串或字符串對象,則拋出一個 TypeError 異常。因此它不能作為方法轉(zhuǎn)移到其他類型對象上。

String.prototype.valueOf ( )

 返回 this 字符串值。

 valueOf 函數(shù)是非通用的 ; 如果它的 this 值不是一個字符串或字符串對象,則拋出一個 TypeError 異常。因此它不能作為方法轉(zhuǎn)移到其他類型對象上。

String.prototype.charAt (pos)

 將 this 對象轉(zhuǎn)換為一個字符串,返回包含了這個字符串 pos 位置的字符的字符串。如果那個位置沒有字符,返回空字符串。返回結(jié)果是個字符串值,不是字符串對象。

 如果 pos 是一個數(shù)字類型的整數(shù)值,則 x.charAt( pos) 與 x.substring( pos, pos+1) 的結(jié)果相等。

 當用一個參數(shù) pos 調(diào)用 charAt 方法,采用以下步驟:

  1. 以 this 值作為參數(shù)調(diào)用 CheckObjectCoercible。
  2. 令 S 為以 this 值作為參數(shù)調(diào)用 ToString 的結(jié)果 .
  3. 令 position 為 ToInteger(pos).
  4. 令 size 為 S 的字符數(shù) .
  5. 如果 position < 0 或 position ≥ size, 返回空字符串 .
  6. 返回一個長度為 1 的字符串 , 它包含 S 中 position 位置的一個字符 , 在這里 S 中的第一個(最左邊)字符被當作是在位置 0,下一個字符被當作是在位置 1,等等 .

 charAt 函數(shù)被有意設計成通用的;它不要求它的 this 值是字符串對象。因此,他可以當做方法轉(zhuǎn)移到其他類型對象。

String.prototype.charCodeAt (pos)

 將 this 對象轉(zhuǎn)換為一個字符串,返回一個代表這個字符串 pos 位置字符的代碼單元值的數(shù)字(小于 216 的非負整數(shù))。如果那個位置沒有字符,返回 NaN。

 當用一個參數(shù) pos 調(diào)用 charCodeAt 方法,采用以下步驟:

  1. 以 this 值作為參數(shù)調(diào)用 CheckObjectCoercible。
  2. 令 S 為以 this 值作為參數(shù)調(diào)用 ToString 的結(jié)果 .
  3. 令 position 為 ToInteger(pos).
  4. 令 size 為 S 的字符數(shù) .
  5. 如果 position < 0 或 position ≥ size, 返回 NaN.
  6. 返回一個數(shù)字類型值,值是字符串 S 中 position 位置字符的代碼單元值。 在這里 S 中的第一個(最左邊)字符被當作是在位置 0,下一個字符被當作是在位置 1,等等 .

 charCodeAt 函數(shù)被有意設計成通用的;它不要求它的 this 值是字符串對象。因此,他可以當做方法轉(zhuǎn)移到其他類型對象。

String.prototype.concat ( [ string1 [ , string2 [ , … ] ] ] )

 當用一個或更多參數(shù) string1, string2, 等等 , 調(diào)用 concat 方法 , 它返回一個包含了 --this 對象(轉(zhuǎn)換為一個字符串)中的字符們和后面跟著的每個 string1, string2, 等等,(每個參數(shù)都轉(zhuǎn)換為字符串)里的字符們 -- 的字符串。返回結(jié)果是一個字符串值,不是一個字符串對象。采用以下步驟:

  1. 以 this 值作為參數(shù)調(diào)用 CheckObjectCoercible。
  2. 令 S 為以 this 值作為參數(shù)調(diào)用 ToString 的結(jié)果 .
  3. 令 args 為一個內(nèi)部列表,它是傳給這個函數(shù)的參數(shù)列表的拷貝 .
  4. 令 R 為 S.
  5. 只要 args 不是空,就重復刪除 args 的第一個元素,并令 next 為這個元素 .令 R 為包含了 -- 之前的 R 值中的字符們和后面跟著的 ToString(next) 結(jié)果的字符們 -- 的字符串值。
  6. 返回 R.

 concat 方法的 length 屬性是 1.

 concat 函數(shù)被有意設計成通用的;它不要求它的 this 值是字符串對象。因此,他可以當做方法轉(zhuǎn)移到其他類型對象。

String.prototype.indexOf (searchString, position)

 將 this 對象轉(zhuǎn)換為一個字符串,如果 searchString 在這個字符串里大于或等于 position 的位置中的一個或多個位置使它呈現(xiàn)為字符串的子串,那么返回這些位置中最小的索引;否則返回 -1。如果 position 是 undefined,就認為它是 0,以搜索整個字符串。

 indexOf 需要兩個參數(shù) searchString 和 position,執(zhí)行以下步驟:

  1. 以 this 值作為參數(shù)調(diào)用 CheckObjectCoercible。
  2. 令 S 為以 this 值作為參數(shù)調(diào)用 ToString 的結(jié)果 .
  3. 令 searchStr 為 ToString(searchString).
  4. 令 pos 為 ToInteger(position). ( 如果 position 是 undefined, 此步驟產(chǎn)生 0).
  5. 令 len 為 S 的字符數(shù) .
  6. 令 start 為 min(max(pos, 0), len).
  7. 令 searchLen 為 SearchStr 的字符數(shù) .
  8. 返回 一個不小于 start 的可能的最小值整數(shù) k,使得 k+searchLen 不大于 len,并且對所有小于 searchLen 的非負數(shù)整數(shù) j,S 的 k+j 位置字符和 searchStr 的 j 位置字符相同;但如果沒有這樣的整數(shù) k,則返回 -1。

 indexOf 的 length 屬性是 1。

 indexOf 函數(shù)被有意設計成通用的;它不要求它的 this 值是字符串對象。因此,他可以當做方法轉(zhuǎn)移到其他類型對象。

String.prototype.lastIndexOf (searchString, position)

 將 this 對象轉(zhuǎn)換為一個字符串,如果 searchString 在這個字符串里小于或等于 position 的位置中的一個或多個位置使它呈現(xiàn)為字符串的子串,那么返回這些位置中最大的索引;否則返回 -1。如果 position 是 undefined,就認為它是字符串值的長度,以搜索整個字符串。

 lastIndexOf 需要兩個參數(shù) searchString 和 position,執(zhí)行以下步驟:

  1. 以 this 值作為參數(shù)調(diào)用 CheckObjectCoercible。
  2. 令 S 為以 this 值作為參數(shù)調(diào)用 ToString 的結(jié)果 .
  3. 令 searchStr 為 ToString(searchString).
  4. 令 numPos 為 Tonumber(position). ( 如果 position 是 undefined, 此步驟產(chǎn)生 NaN).
  5. 如果 numPos 是 NaN, 令 pos 為 +∞; 否則 , 令 pos 為 ToInteger(numPos).
  6. 令 len 為 S 的字符數(shù) .
  7. 令 start 為 min(max(pos, 0), len).
  8. 令 searchLen 為 SearchStr 的字符數(shù) .
  9. 返回 一個不大于 start 的可能的最大值整數(shù) k,使得 k+searchLen 不大于 len,并且對所有小于 searchLen 的非負數(shù)整數(shù) j,S 的 k+j 位置字符和 searchStr 的 j 位置字符相同;但如果沒有這樣的整數(shù) k,則返回 -1。

 lastIndexOf 的 length 屬性是 1。

 lastIndexOf 函數(shù)被有意設計成通用的;它不要求它的 this 值是字符串對象。因此,他可以當做方法轉(zhuǎn)移到其他類型對象。

String.prototype.localeCompare (that)

 當以一個參數(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í)行以下步驟以預備好字符串:

  1. 以 this 值作為參數(shù)調(diào)用 CheckObjectCoercible。
  2. 令 S 為以 this 值作為參數(shù)調(diào)用 ToString 的結(jié)果 .
  3. 令 That 為 ToString(that).

 如果將 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)移到其他類型對象。

String.prototype.match (regexp)

 當以 regexp 作為參數(shù)調(diào)用 match 方法,采用以下步驟:

  1. 以 this 值作為參數(shù)調(diào)用 CheckObjectCoercible。
  2. 令 S 為以 this 值作為參數(shù)調(diào)用 ToString 的結(jié)果 .
  3. 如果 Type(regexp) 是 Object 并且 regexp 的 [[Class]] 內(nèi)部屬性的值是 "RegExp", 則令 rx 為 regexp;
  4. 否則 , 令 rx 為 仿佛是用表達式 new RegExp( regexp) 創(chuàng)建的新正則對象,這里的 RegExp 是標準內(nèi)置構(gòu)造器名。
  5. 令 global 為 以 "global" 為參數(shù)調(diào)用 rx 的 [[Get]] 內(nèi)部方法的結(jié)果 .
  6. 令 exec 為 標準內(nèi)置函數(shù) RegExp.prototype.exec ( 見 15.10.6.2)
  7. 如果 global 不是 true, 則以 rx 作為 this 值,用包含 S 的參數(shù)列表調(diào)用 exec 的 [[Call]] 內(nèi)部方法,返回結(jié)果。
  8. 否則 , global 是 true以 "lastIndex" 和 0 作為參數(shù)調(diào)用 rx 的 [[Put]] 內(nèi)部方法。令 A 為 仿佛是用表達式 new Array() 創(chuàng)建的新數(shù)組,這里的 Array 是標準內(nèi)置構(gòu)造器名 .令 previousLastIndex 為 0.令 n 為 0.令 lastMatch 為 true.只要 lastMatch 是 true,就重復令 result 為 以 rx 作為 this 值,用包含 S 的參數(shù)列表調(diào)用 exec 的 [[Call]] 內(nèi)部方法的結(jié)果。如果 result 是 null, 則設定 lastMatch 為 false.否則 , result 不是 null令 thisIndex 為 以 "lastIndex" 為參數(shù)調(diào)用 rx 的 [[Get]] 內(nèi)部方法的結(jié)果。如果 thisIndex = previousLastIndex 則以 "lastIndex" 和 thisIndex+1 為參數(shù)調(diào)用 rx 的 [[Put]] 內(nèi)部方法。設定 previousLastIndex 為 thisIndex+1.否則 , 設定 previousLastIndex 為 thisIndex.令 matchStr 為 以 0 為參數(shù)調(diào)用 result 的 [[Get]] 內(nèi)部方法的結(jié)果。以 ToString(n), 屬性描述符 {[[Value]]: matchStr, [[Writable]]: true, [[Enumerable]]: true, [[configurable]]: true}, 和 false 作為參數(shù)調(diào)用 A 的 [[DefineOwnProperty]] 內(nèi)部方法。n 遞增 1.如果 n = 0, 則返回 null.返回 A.

 match 函數(shù)被有意設計成通用的;它不要求它的 this 值是字符串對象。因此,他可以當做方法轉(zhuǎn)移到其他類型對象。

String.prototype.replace (searchValue, replaceValue)

 首先根據(jù)以下步驟設定 string:

  1. 以 this 值作為參數(shù)調(diào)用 CheckObjectCoercible。
  2. 令 string 為 以 this 值作為為參數(shù)調(diào)用 ToString 的結(jié)果。

 如果 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)移到其他類型對象。

String.prototype.search (regexp)

 當用參數(shù) regexp 調(diào)用 search 方法,采用以下步驟:

  1. 以 this 值作為參數(shù)調(diào)用 CheckObjectCoercible。
  2. 令 string 為 以 this 值作為參數(shù)調(diào)用 ToString 的結(jié)果。
  3. 如果 Type(regexp) 是 Object 且 regexp 的 [[Class]] 內(nèi)部屬性的值是 "RegExp", 則令 rx 為 regexp;
  4. 否則 , 令 rx 為仿佛是用表達式 new RegExp( regexp) 創(chuàng)建的新正則對象,這里的 RegExp 是標準內(nèi)置構(gòu)造器名。
  5. 從 string 開始位置搜索正則表達式模式 rx 的匹配。如果找到匹配,令 result 為匹配在 string 里的偏移量;如果沒有找到匹配,令 result 為 -1。執(zhí)行搜索時 regexp 的 lastIndex 和 global 屬性是被忽略的。regexp 的 lastIndex 屬性保持不變。
  6. 返回 result.

 search 函數(shù)被有意設計成通用的;它不要求它的 this 值是字符串對象。因此,他可以當做方法轉(zhuǎn)移到其他類型對象。

String.prototype.slice (start, end)

 slice 方法需要兩個參數(shù) start 和 end,將 this 對象轉(zhuǎn)換為一個字符串,返回這個字符串中從 start 位置的字符到(但不包含)end 位置的字符的一個子字符串(或如果 end 是 undefined,就直接到字符串尾部)。用 sourceLength 表示字符串長度,如果 start 是負數(shù),就把它看做是 sourceLength+start;如果 end 是負數(shù),就把它看做是 sourceLength+end。返回結(jié)果是一個字符串值,不是字符串對象。采用以下步驟:

  1. 以 this 值作為參數(shù)調(diào)用 CheckObjectCoercible。
  2. 令 S 為以 this 值作為參數(shù)調(diào)用 ToString 的結(jié)果 .
  3. 令 len 為 S 的字符數(shù) .
  4. 令 intStart 為 ToInteger(start).
  5. 如果 end 是 undefined, 令 intEnd 為 len; 否則 令 intEnd 為 ToInteger(end).
  6. 如果 intStart 是 negative, 令 from 為 max(len + intStart,0); 否則 令 from 為 min(intStart,len).
  7. 如果 intEnd 是 negative, 令 to 為 max(len +intEnd,0); 否則 令 to 為 min(intEnd, len).
  8. 令 span 為 max(to – from,0).
  9. 返回 一個包含 --S 中從 form 位置的字符開始的 span 個連續(xù)字符 -- 的字符串。

 slice 方法的 length 屬性是 2。

 slice 函數(shù)被有意設計成通用的;它不要求它的 this 值是字符串對象。因此,他可以當做方法轉(zhuǎn)移到其他類型對象。

String.prototype.split (separator, limit)

 將 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 方法,采用以下步驟:

  1. 以 this 值作為參數(shù)調(diào)用 CheckObjectCoercible。
  2. 令 S 為以 this 值作為參數(shù)調(diào)用 ToString 的結(jié)果 .
  3. 令 A 為 仿佛使用表達式 new Array() 創(chuàng)建的新對象,這里的 Array 是標準內(nèi)置構(gòu)造器名 .
  4. 令 lengthA 為 0.
  5. 如果 limit 是 undefined, 令 lim = 232–1; 否則 令 lim = ToUint32(limit).
  6. 令 s 為 S 的字符數(shù) .
  7. 令 p = 0.
  8. 如果 separator 是正則對象 ( 它的 [[Class]] 是 "RegExp"), 令 R = separator; 否則,令 R = ToString(separator).
  9. 如果 lim = 0, 返回 A.
  10. 如果 separator 是 undefined, 則以 "0", 屬性描述符 {[[Value]]: S, [[Writable]]: true, [[Enumerable]]: true, [[Configurable]]: true}, 和 false 作為參數(shù)調(diào)用 A 的 [[DefineOwnProperty]] 內(nèi)部方法。返回 A.
  11. 如果 s = 0, 則調(diào)用 SplitMatch(S, 0, R) 并 令 z 為 它的 MatchResult 結(jié)果 .如果 z 不是 failure, 返回 A.以 "0", 屬性描述符 {[[Value]]: S, [[Writable]]: true, [[Enumerable]]: true, [[Configurable]]: true}, 和 false 作為參數(shù)調(diào)用 A 的 [[DefineOwnProperty]] 內(nèi)部方法。返回 A.
  12. 令 q = p.
  13. 只要 q ≠ s,就重復調(diào)用 SplitMatch(S, q, R) 并 令 z 為 它的 MatchResult 結(jié)果 .如果 z 是 failure, 則 令 q = q+1.否則 , z 不是 failurez 必定是一個 State. 令 e 為 z 的 endIndex 并 令 cap 為 z 的 captures 數(shù)組 .如果 e = p, 則 令 q = q+1.否則 , e ≠ p令 T 為一個字符串,它的值等于包含 -- 在 S 中從 p(包括它)位置到 q(不包括)位置的字符 -- 的子字符串的值。以 ToString(lengthA), 屬性描述符 {[[Value]]: T, [[Writable]]: true, [[Enumerable]]: true, [[Configurable]]: true}, 和 false 作為參數(shù)調(diào)用 A 的 [[DefineOwnProperty]] 內(nèi)部方法 .lengthA 遞增 1.如果 lengthA = lim, 返回 A.令 p = e.令 i = 0.只要 i 不等于 cap 中的元素個數(shù),就重復 .令 i = i+1.以 ToString(lengthA), 屬性描述符 {[[Value]]: cap[i], [[Writable]]: true, [[Enumerable]]: true, [[Configurable]]: true}, 和 false 作為參數(shù)調(diào)用 A 的 [[DefineOwnProperty]] 內(nèi)部方法。lengthA 遞增 1.如果 lengthA = lim, 返回 A.令 q = p.
  14. 令 T 為 為一個字符串,它的值等于包含 -- 在 S 中從 p(包括它)位置到 q(不包括)位置的字符 -- 的子字符串的值。
  15. 以 ToString(lengthA), 屬性描述符 {[[Value]]: T, [[Writable]]: true, [[Enumerable]]: true, [[Configurable]]: true}, 和 false 作為參數(shù)調(diào)用 A 的 [[DefineOwnProperty]] 內(nèi)部方法。
  16. 返回 A.

 SplitMatch 抽象操作需要三個參數(shù),字符串 S,整數(shù) q,字符串或正則對象 R,按照以下順序執(zhí)行并返回一個 MatchResult(見 15.10.2.1):

  1. 如果 R 是個正則對象 ( 它的 [[Class]] 是 "RegExp"), 則以 S 和 q 作為參數(shù)調(diào)用 R 的 [[Match]] 內(nèi)部方法,并返回 MatchResult 的結(jié)果。
  2. 否則,Type(R) 必定是 String. 令 r 為 R 的字符數(shù) .
  3. 令 s 為 S 的字符數(shù) .
  4. 如果 q+r > s 則返回 MatchResult failure.
  5. 如果存在一個在 0(包括)到 r(不包括)之間的整數(shù) i,使得 S 的 q+i 位置上的字符和 R 的 i 位置上的字符不同,則返回 failure。
  6. 令 cap 為 captures 的空數(shù)組 ( 見 15.10.2.1).
  7. 返回 State 數(shù)據(jù)結(jié)構(gòu) (q+r, cap). ( 見 15.10.2.1)

 split 方法的 length 屬性是 2.

 分隔符是正則對象時,split 方法忽略 separator.global 的值。

 split 函數(shù)被有意設計成通用的;它不要求它的 this 值是字符串對象。因此,他可以當做方法轉(zhuǎn)移到其他類型對象。

String.prototype.substring (start, end)

 substring 方法需要兩個參數(shù) start 和 end,將 this 對象轉(zhuǎn)換為一個字符串,返回包含 -- 在轉(zhuǎn)換結(jié)果字符串中從 start 位置字符一直到(但不包括)end 位置的字符(或如果 end 是 undefined,就到字符串末尾)-- 的一個子串。返回結(jié)果是字符串值,不是字符串對象。

 如果任一參數(shù)是 NaN 或負數(shù),它被零取代;如果任一參數(shù)大于字符串長度,它被字符串長度取代。

 如果 start 大于 end,交換它們的值。

 采用以下步驟:

  1. 以 this 值作為參數(shù)調(diào)用 CheckObjectCoercible。
  2. 令 S 為以 this 值作為參數(shù)調(diào)用 ToString 的結(jié)果 .
  3. 令 len 為 S 的字符數(shù) .
  4. 令 intStart 為 ToInteger(start).
  5. 如果 end 是 undefined, 令 intEnd 為 len; 否則 令 intEnd 為 ToInteger(end).
  6. 令 finalStart 為 min(max(intStart, 0), len).
  7. 令 finalEnd 為 min(max(intEnd, 0), len).
  8. 令 from 為 min(finalStart, finalEnd).
  9. 令 to 為 max(finalStart, finalEnd).
  10. 返回 一個長度是 to - from 的字符串,它包含 S 中從索引值 form 到 to-1(按照索引升序)的所有字符。

 substring 方法的 length 屬性是 2。

 substring 函數(shù)被有意設計成通用的;它不要求它的 this 值是字符串對象。因此,他可以當做方法轉(zhuǎn)移到其他類型對象。

String.prototype.toLowerCase ( )

 采用以下步驟:

  1. 以 this 值作為參數(shù)調(diào)用 CheckObjectCoercible。
  2. 令 S 為以 this 值作為參數(shù)調(diào)用 ToString 的結(jié)果 .
  3. 令 L 為一個字符串,L 的每個字符是 S 中相應字符的 Unicode 小寫等量,或者(如果沒有 Unicode 小寫等量存在)是實際的 S 中相應字符值。
  4. 返回 L.

 為了此操作,字符串的 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)移到其他類型對象。

String.prototype.toLocaleLowerCase ( )

 此函數(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)移到其他類型對象。

String.prototype.toUpperCase ( )

 此函數(shù)的將字符映射到在 Unicode 字符數(shù)據(jù)庫中與其等值的大寫字符,除此之外此函數(shù)的行為采用與 String.prototype.toLowerCase 完全相同的方式。

 toUpperCase 函數(shù)被有意設計成通用的;它不要求它的 this 值是字符串對象。因此,他可以當做方法轉(zhuǎn)移到其他類型對象。

String.prototype.toLocaleUpperCase ( )

 此函數(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)移到其他類型對象。

String.prototype.trim ( )

 采用以下步驟:

  1. 以 this 值作為參數(shù)調(diào)用 CheckObjectCoercible。
  2. 令 S 為以 this 值作為參數(shù)調(diào)用 ToString 的結(jié)果 .
  3. 令 T 為一個字符串值,它是 S 的一個拷貝,并刪除了開頭和結(jié)尾中空白的??瞻椎亩x是 WhiteSpace 和 LineTerminato r 的并集。
  4. 返回 T.

 trim 函數(shù)被有意設計成通用的;它不要求它的 this 值是字符串對象。因此,他可以當做方法轉(zhuǎn)移到其他類型對象。

String 實例的屬性

 字符串實例從字符串原型對象繼承屬性,字符串實例的 [[Class]] 內(nèi)部屬性值是 "String"。字符串實例還有 [[PrimitiveValue]] 內(nèi)部屬性,length 屬性,和一組屬性名是數(shù)組索引的可遍歷屬性。

 [[PrimitiveValue]] 內(nèi)部屬性是代表這個字符串對象的字符串值。以數(shù)組索引命名的屬性對應字符串值里的單字符。一個特殊的 [[GetOwnProperty]] 內(nèi)部方法用來為數(shù)組索引命名的屬性指定數(shù)字,值,和特性。

length

 在代表這個字符串對象的字符串值里的字符數(shù)。

 一旦創(chuàng)建了一個字符串對象,這個屬性是不可變的。它有特性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。

[[GetOwnProperty]] ( P )

 數(shù)組對象使用一個,用在其他原生 ECMAscript 對象的 [[GetOwnProperty]] 內(nèi)部方法 (8.12.1) 的變化版。這個特殊內(nèi)部方法用來給命名屬性添加訪問器,對應到字符串對象的單字符。

 設 S 為一個字符串對象,P 為一個字符串。

 當以屬性名 P 調(diào)用 S 的 [[GetOwnProperty]] 內(nèi)部方法,采用以下步驟:

  1. 令 desc 為 以 P 為參數(shù)調(diào)用 S 的默認 [[GetOwnProperty]] 內(nèi)部方法 (8.12.1) 的結(jié)果。
  2. 如果 desc 不是 undefined,返回 desc.
  3. 如果 ToString(abs(ToInteger(P))) 與 P 的值不同 , 返回 undefined.
  4. 令 str 為 S 的 [[PrimitiveValue]] 內(nèi)部屬性字符串值。
  5. 令 index 為 ToInteger(P).
  6. 令 len 為 str 里的字符數(shù) .
  7. 如果 len ≤ index, 返回 undefined.
  8. 令 resultStr 為一個長度為 1 的字符串 , 里面包含 str 中 index 位置的一個字符 , 在這里 str 中的第一個(最左邊)字符被認為是在位置 0,下一個字符在位置 1,依此類推。
  9. 返回一個屬性描述符 { [[Value]]: resultStr, [[Enumerable]]: true, [[Writable]]: false, [[Configurable]]: false }


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號