提示:ECMAScript 中的字符串是不可變的,字符串不能更改,只能替換。所以以下操作方法均不能改變原字符串,下面的講解中將不對源字符串做打印觀察,只打印觀察新字符串的值。
1. length
獲取字符串的長度
var browserType = 'mozilla';
browserType.length;//7
2. str[idx]、charAt()、charCodeAt()
str[idx]
屬性訪問
charAt()
方法返回字符串中指定下標(位置)的字符串
charCodeAt()
方法返回字符串中指定索引的字符 unicode 編碼
browserType[0]; //m
browserType.charAt(0); //m
browserType[-2]; //undefined
browserType.charAt(-2); //""
注意:小標是從0開始,不是1!
使用屬性訪問有點不太靠譜:
- 不適用 Internet Explorer 7 或更早的版本
- 它讓字符串看起來像是數組(其實並不是)
- 如果找不到字符,[ ] 返回 undefined,而 charAt() 返回空字符串。
- 它是只讀的。str[0] = "A" 不會產生錯誤(但也不會工作!)
例如:
var str = "HELLO WORLD";
str[0] = "A"; // 不產生錯誤,但不會工作
str[0]; // 返回 H
3. indexOf() 、 lastIndexOf()
indexOf()
返回字符串中一個子串第一處出現的索引(從左到右搜索)。如果沒有匹配項,返回 -1 。
'mozilla'.indexOf('zill'); //2
lastIndexOf()
返回指定文本在字符串中最后一次出現的索引,如果沒有匹配項,返回 -1
var str = "abcdarf";
var pos = str.lastIndexOf("a"); //4
兩種方法都接受作為檢索起始位置的第二個參數。
var str = "abcdarf";
var pos = str.indexOf("a"); //0
var pos = str.indexOf("a",1); //4
lastIndexOf()
方法向后進行檢索(從尾到頭),這意味着:假如第二個參數是4,則從位置4開始往左檢索,直到字符串的起點。(個人的理解:lastIndexOf() 檢索的本質是從右往左檢索,返回該字符串第一次出現的位置,這里提到的下標位置均為從左往右的下標位置)
var str = "bcda23a";
str.lastIndexOf("a"); //6
str.lastIndexOf("a",1); //-1
str.lastIndexOf("a",4); //3
4. search()
search()
方法搜索特定值的字符串,並返回匹配的位置:
var str = "bcda23daef";
str.search('a'); //3
str.earch(/da/ig); //2
與indexOf的區別:
search()
方法無法設置第二個開始位置參數。
indexOf()
方法無法設置更強大的搜索值(正則表達式)。
5. slice()
提取字符串的某個部分,並在新字符串中返回被提取的部分。
slice(a,b) //獲取范圍[a,b)
該方法設置兩個參數:起始索引(開始位置 ),終止索引(結束位置)。可接受負的索引
var str = "Apple, Banana, Mango";
var res = str.slice(7,13); //res "Banana"
如果某個參數為負,則從字符串的結尾開始計數。
var str = "Apple, Banana, Mango";
str.slice(-14,-7); //打印結果: " Banana"
str.slice(5,-7); // 打印結果:", Banana"
//str不會改變
如果省略第二個參數,則該方法將裁剪字符串的剩余部分:
var str = "Apple, Banana, Mango";
str.slice(-5); //"Mango"
str.slice(7); //"Banana, Mango"
提示:負值位置不適用 Internet Explorer 8 及其更早版本。
6. substring()
substring(start,end); //截取字符串 范圍是[start, end)
該方法設置兩個參數:起始索引(開始位置),終止索引(結束位置)。無法接受負的索引。
var str = "Apple, Banana, Mango";
str.substring(7,13); //"Banana"
如果省略第二個參數,則該 substring() 將裁剪字符串的剩余部分。
var str = 'Hello world!';
str.substring(3); //"lo world!"
7. substr()
substr(a,b) //截取字符串,范圍是從下標為a的字符開始,截取長度為b
該方法設置兩個參數:起始索引(開始位置 可為負數),截取的長度。
var str = "Hello world!";
str.subst(3,4); //"lo w"
如果省略第二個參數,則該 substr() 將裁剪字符串的剩余部分。
var str = "Hello world!";
str.subst(3); //"lo world!"
8. replace()
用另一個值替換在字符串中指定的值,不會改變調用它的字符串。它返回的是新字符串。默認地,replace()
只替換首個匹配,並對大小寫敏感:
var str = "Hello world! hello";
var res = str.replace('llo','*'); // "He* world! hello"
var str = "HeLlo world! hello";
var res = str.replace('llo','*'); // "HeLlo world! he*"
如需執行大小寫不敏感的替換,請使用正則表達式 /i(大小寫不敏感),如需替換所有匹配,請使用正則表達式的 g 標志(用於全局搜索):
var str = "HeLlo world! hello";
str.replace(/llo/ig,'*'); //"He* world! he*"
9. toUpperCase()、toLowerCase()
toUpperCase()
把字符串轉換為大寫;toLowerCase()
把字符串轉換為小寫。
var str= "Hello World!";
str.toUpperCase(); //"HELLO WORLD!"
str.toLowerCase(); //"hello world!"
10. concat()
concat()
連接兩個或多個字符串。
var str1 = "Hello";
var str2= "World";
var str3= str1.concat(str2); // "HelloWorld"
var str4 = str1.concat(" ",str2,"!"); //"Hello World!"
11. trim()
trim()
方法刪除字符串兩端的空白符。
var str = " Hello World! ";
str.trim(); // "Hello World!"
警告:Internet Explorer 8 或更低版本不支持 trim() 方法。
12. split()
可以通過 split()
將字符串轉換為數組。可接受正則匹配。
var str = "a,fr,34, 2019/06/28,t";
str.split('');//["a", ",", "f", "r", ",", "3", "4", ",", " ", "2", "0", "1", "9", "/", "0", "6", "/", "2", "8", ",", "t"]
str.split(',');//["a", "fr", "34", " 2019/06/28", "t"]
str.split('/');//["a,fr,34, 2019", "06", "28,t"]
str.split(' ');//["a,fr,34,", "2019/06/28,t"]
str.split(/,|\/|\s/g);//["a", "fr", "34", "", "2019", "06", "28", "t"]