1. 程式人生 > >JS引用型別中的基本包裝型別——String

JS引用型別中的基本包裝型別——String

String型別是字串的物件包裝型別,可以像下面這樣使用String建構函式來建立。

 var stringObject = new String("hello world");
一,字元方法

1、用於訪問字串中特定字元的兩個方法:charAt()和charCodeAt()
這兩個方法都接收一個引數,即基於0的字元位置。
charAt()方法以單字串的形式返回給定位置的那個字元。
charAtCode()方法返回給定位置的那個字元的字元編碼。
示例如下:

 var stringValue = "hello world";
  console.log(stringValue.charAt(1));//e
  console.log(stringValue.charCodeAt(1));//101

ECMAScript5還定義了另一個訪問個別字符的方法,可以使用方括號加數字索引來訪問字串中的特殊字元,如下所示

var stringValue = "hello world";
 console.log(stringValue[1]);//e

2、frommCharCode()方法:
string建構函式的一個靜態方法,該方法的任務是接受一或多個字元編碼,然後將它們轉化成字串,該方法與charCodeAt()執行的是相反的操作,如下:

alert(String.fromCharCode(104,101,108,108,111));//"hello"
二,字串操作方法

1,concat()方法:


用於將一個或多個字串拼接起來,返回拼接得到的新字串。該方法可以接收任意多個引數,第一個引數是第一個要拼接的字串,第二個引數是再接著要拼接的字串。
2,ECMAScript還提供了三個基於子字串建立新字串的方法:slice(),substr()和substring()。

  • 該三個方法都會返回被操作字串的一個子字串,也都接收一或兩個引數。
  • 第一個引數指定子字串的開始位置,第二個引數(在指定的情況下)表示子字串到哪裡結束
  • 具體來說slice()和substring()的第二個引數指定的是子字串最後一個字元後面的位置。而substr()的第二個引數指定的則是返回的字元個數。
  • 如果沒給這些方法傳遞第二個引數,則將字串的末尾作為結束位置。
  • 這些方法對原字串沒有任何影響
    示例如下:
  var stringValue = "hello world";
  console.log(stringValue.slice(3));//"lo world"
  console.log(stringValue.substring(3));//"lo world"
  console.log(stringValue.substr(3));//"lo world"
  console.log(stringValue.slice(3,7));//"lo w"
  console.log(stringValue.substring(3,7));//"lo w"
  console.log(stringValue.substr(3,7));//"lo worl"

在傳遞給這些方法的引數是負值的情況下,結果就不盡相同。

  • slice()方法會將傳入的的負值與字串的長度相加
  • substr()方法會將負的第一個引數加上字串的長度,而將負的第二個引數轉化為0
  • substring()方法會把所有負值引數都轉化為0
  var stringValue = "hello world";
  console.log(stringValue.length);//11;在此處先輸出一下字串的長度
  console.log(stringValue.slice(-3));//"rld";相當於stringValue.slice(8)
  console.log(stringValue.substring(-3));//"hello world";相當於stringValue.substring(0)
  console.log(stringValue.substr(-3));//"rld";相當於stringValue.substr(8)
  console.log(stringValue.slice(3,-4));//"lo w";相當於stringValue.slice(3,7)
  console.log(stringValue.substring(3,-4));//"hel";相當於stringValue.substring(3,7)
  console.log(stringValue.substr(3,-4));//"";相當於stringValue.substr(3,0)
三,字串位置方法

1,indexof()和lastIndexOf()方法:和數組裡面的方法的用法一樣,在博文數組裡面的方法有詳細介紹
2,trim()方法:該方法會建立一個字串的副本,刪除前置及字尾的所有空格,然後返回結果

  var stringValue = "  hello world  ";
  var trimmedStringValue = stringValue.trim();
  console.log(stringValue);//"  hello world  "
  console.log(trimmedStringValue);//"hello world"
四,字串大小寫轉換方法

ECMAScript中涉及字串大小寫轉換的方法有4個:toLowerCase(), toLocaleLowerCase(), toUpperCase(), toLocaleUpperCase()

  • 其中,toLowerCase()和toUpperCase()是兩個經典的方法,借鑑於java.lang.String中的同名方法。
  • toLocaleLowerCase()和toLocaeUpperCase()方法則是針對特定地區的實現,對有些地區來說,針對地區的方法與其通用方法得到的結果相同,但少數語言(如土耳其語)會為Unicode大小寫轉換應用特殊的規則,這時候必須使用針對地區的方法來保證實現正確的轉換。
    示例如下:
  var stringValue = "hello world";
  console.log(stringValue.toUpperCase());//HELLO WORLD
  console.log(stringValue.toLocaleUpperCase());//HELLO WORLD
  var newValue = stringValue.toUpperCase();
  console.log(newValue);//HELLO WORLD
  console.log(stringValue.toLowerCase());//hello world
  console.log(stringValue.toLocaleLowerCase());//hello world
五,字串的模式匹配方法

1,match()方法
在字串上呼叫這個方法,本質上與呼叫RegExp的exec()方法相同。該方法直接收一個引數,要麼是一個正則表示式,要麼是一個RegExp物件,然後返回一個數組。看下面的例子:

 var text = "cat bat sat fat";
  var pattern = /.at/;
  //與pattern.exec(text)相同
  var matches = text.match(pattern);
  console.log(matches.index);//0
  console.log(matches[0]);//"cat"
  console.log(patetrn.lastIndex);//0

解析:本例中的match()方法返回一個數組;如果是呼叫RegExp物件的exec()方法並傳遞本例中的字串,那麼也會得到與此相同的陣列:陣列的第一項是與整個模式匹配的字串,之後的每一項( 如果有)儲存著與正則表示式中的捕獲組匹配的字串。
2,search()方法
該方法唯一的一個引數是由字串或RegExp物件指定的一個正則表示式。
該方法返回字串中第一個匹配項的索引,如果沒有一個匹配項則返回-1

  var text = "cat bat sat fat";
  var searchResult = text.search(/a/);
  console.log(searchResult);//1;返回了1即 “at"在字串中第一次出現的位置

3,replace()方法

ECMAScript()提供了這個方法,是為了簡化替換字串的操作
該方法接收兩個引數:第一個引數可以是一個RegExp物件或者一個字串(該字串不會被轉換成正則表示式),第二個引數可以是一個字串或者一個函式。

  • 如果第一個引數是字串,那麼只會替換第一個子字串。要替換所有子字串,唯一的辦法就是提供一個正則表示式,而且要指定全域性(g)標誌
    如下所示:
 var text = "cat bat sat fat";
 var result_A = text.replace("at","ond");
 console.log(result_A);//"cond bat sat fat"
 var result_B = text.replace(/at/g,"ond");
 console.log(result_B);//"cond bond sond fond"

解析:在上面的例子中,傳入repalce()方法的是字串"at"和替換用的”ond"。替換的結果是把"cat"變成了"cond",但它只會把尋找到的第一個at換成要替換的,然後就會停止尋找。所以字串中其他字串就不會受到影響。
然後又將第一個引數修改為帶有全域性標誌的正則表示式,就會在整個字串中尋找"at",就將全部的"at"都替換成了“ond"。

  • 如果第二個引數是字串,那麼還可以使用一些特殊的字元序列,將正則表示式操作得到的值插入到結果字串中。下表列出了ECMAScript提供這些特殊字元序列:
字元序列 替換文字
$$ $
$& 匹配整個模式的字字串,與RegExp.lastMatch的值相同
$‘ 匹配的子字串之前的子字串,與RegExp.leftContent的值相同
$` 匹配的子字串之後的子字串,與RegExp.rightContent的值相同
$n 匹配第n個捕獲組的字串,其中n等於0-9;$1匹配第一個捕獲組的字串,以此類推
$nn 匹配第nn個捕獲組的字串,其中nn等於01-99;$01匹配第一個捕獲組的字串,以此類推
  • repalce()方法的第二個引數是函式時,在只有一個匹配項(即與模式匹配的字串)的情況下,會向這個函式傳遞3個引數:模式的匹配項、模式匹配項在字串中的位置、原始字串。在正則表示式中定義了多個捕獲組的情況下,傳遞給函式的引數依次是模式的匹配項、第一個捕獲組的匹配項、第二個捕獲組的匹配項······,但最後兩個引數仍然分別是模式的匹配項在字串中的位置和原始字串。
function htmlEscape(text){
//第一個引數是正則表示式,全區模式,可以匹配>、<、&、";第二個引數是一個函式
     return text.replace(/[<>"&]/g,function(match,pos,originalText){
         switch (match){
             case ">":
                 return "&lt;";
             case "<":
                 return "&gt;";
             case "&":
                 return "&amp;";
             case "\"":
                 return "&quot";
         }
     })
 }
 alert(htmlEscape("<p class='greeting'>hello world!</p>"));//&gt;p class='greeting'&lt;hello world!&gt;/p&lt;
六、localeCompare()方法

該方法比較兩個字串,並返回下列值中的一個:

  • 如果字串在子母表中應該排在字串引數之前,則返回一個負數(大多數情況下是-1,具體的值要視實現而定)
  • 如果字串等於字串引數,則返回0
  • 如果字串在字母表中應該排在字串引數之後,則返回一個正數(大多數情況是1,具體值要視實現而定)
    例子如下:
 var stringValue = "yellow";
 function determineOrder(value){
     var result = stringValue.localeCompare(value);
     if(result < 0){
         alert("the string 'yellow' comes before the string '"+value+"'");
     } else if(result > 0){
         alert("the string 'yellow' come after the string '"+value+"'");
     } else{
         alert("the string 'yellow' is equal to the string '"+value +"'");
     }
 }
 determineOrder("brick");//the string 'yellow' come after the string 'brick'
 determineOrder("yellow");//the string 'yellow' is equal to the string 'yellow'
 determineOrder("zoo");//the string 'yellow' comes before the string 'zoo'