前言:javascript
javascript沒有表示單個字符的字符型,只有字符串String類型,字符型至關於僅包含一個字符的字符串。java
字符串String是javascript基本數據類型,同時javascript也支持String對象,它是一個原始值的包裝對象。正則表達式
在須要時,javascript會自動在原始形式和對象形式之間轉換。數組
一、定義:瀏覽器
字符串String類型是由引號括起來的一組由16位Unicode字符組成的字符序列函數
二、特色:編碼
javascript中的字符串是不可變的。一旦字符串被建立,就永遠沒法改變它。url
要改變某個變量保存的字符串,首先要銷燬原來的字符串,而後再用另外一個包含新值的字符串填充該變量spa
能夠經過+運算符鏈接其餘字符串來建立一個新字符串code
var lang = "java"; lang = lang + "script"; //'javascript'先建立一個可以容納10個字符的新字符串,而後在這個字符串中填充'java'和'script',最後一步是銷燬原來的字符串'java'和'script',由於這兩個字符串已經沒用
三、轉字符串
四、屬性
字符串String類型的每一個實例都有一個length屬性,表示字符串中的字符個數。因爲字符串是不可變的,因此字符串的長度也不可變。
字符串的length屬性不會在for/in循環中枚舉,也不能經過delete操做符刪除
對於字符串s來講,最後一個字符的索引是s.length - 1
var str = "test"; console.log(str.length);//4 str.length = 6; console.log(str,str.length);//"test",4
五、方法
【1】訪問字符方法
【chartAt()】
接收一個基於0的字符位置的參數,返回指定位置的字符。當參數爲空或NaN時,默認參數爲0;當參數超出範圍時,則返回一個空字符串
var str = "hello"; console.log(str.charAt(1));//e console.log(str.charAt(-1));//'' console.log(str.charAt(10));//'' console.log(str.charAt());//h console.log(str.charAt(NaN));//h
charAt()方法涉及到Number()函數的隱式類型轉換,若是轉換爲數值,則按照上述規則輸出字符串;若是轉換爲NaN,則輸出第0個字符
var str = "hello"; console.log(str.charAt(true));//'e' console.log(str.charAt(false));//'h' console.log(str.charAt('abc'));//'h' console.log(str.charAt({}));//'h' console.log(str.charAt([2]));//'l'x.charAt(pos)與x.substring(pos, pos+1)、x.substr(pos,1)、x.slice(pos,pos+1)的結果相等
var str = "hello"; console.log(str.charAt(1));//'e' console.log(str.substring(1,2));//'e' console.log(str.slice(1,2));//'e' console.log(str.substr(1,1));//'e'
【charCodeAt()】
接收一個基於0的字符位置的參數,但返回的是指定位置的字符16位Unicode編碼。
返回值是一個16位的整數,在0-65535之間,即0x0000-0xffff之間。參數爲空或NaN時,默認參數爲0;當參數超出範圍時,則返回NaN
var str = "hello"; console.log(str.charCodeAt());//104 console.log(str.charCodeAt(0));//104 console.log(str.charCodeAt(1));//101 console.log(str.charCodeAt(-1));//NaN console.log(str.charCodeAt(10));//NaN console.log(str.charCodeAt(NaN));//104
一樣地,charCodeAt()方法涉及到Number()函數的隱式類型轉換,若是轉換爲數值,則按照上述規則輸出相應值;若是轉換爲NaN,則輸出第0個字符的字符編碼
var str = "hello"; console.log(str.charCodeAt(true));//101 console.log(str.charCodeAt(false));//104 console.log(str.charCodeAt('abc'));//104 console.log(str.charCodeAt({}));//104 console.log(str.charCodeAt([2]));//l08
【fromCharCode()】
String構造函數自己有一個靜態方法:fromCharCode()。這個方法的任務是接收一個或多個字符編碼,而後把它們轉換成一個字符串。
從本質上看,這個方法與實例方法charCodeAt()執行的是相反的操做。若參數爲空或NaN時,則返回空字符串;若參數超出0-65535的範圍,則輸出字符不可控
console.log(String.fromCharCode(104,101,108,108,111));//'hello'
console.log(String.fromCharCode(0x6211,0x662f,0x5c0f,0x706b,0x67f4));//'我是小火柴'
console.log(String.fromCharCode());//''
console.log(String.fromCharCode(NaN));//''
console.log(String.fromCharCode(-1));
console.log(String.fromCharCode(65560));
//若是一個字符佔用四字節,則須要拆成兩個字符表示
console.log(String.fromCharCode(0xD842, 0xDFB7)); // "𠮷"
【[]】
ECMAScript5定義了另外一個訪問字符的方法,使用方括號加數字索引來訪問字符串中的特定字符。
若是參數超出範圍或是NaN時,則輸出undefined;沒有參數時,會報錯;
該方法沒有Number()轉型函數的隱式類型轉換,但參數爲單數值數組時可轉換爲數值【IE7-瀏覽器不支持】
var str = "hello"; console.log(str[0]);//h console.log(str[[1]]);//e console.log(str[false]);//undefined console.log(str[-1]);//undefined console.log(str[NaN]);//undefined console.log(str[]);//報錯
【2】字符拼接
【concat()】
將一個或多個字符串拼接起來,返回拼接獲得的新字符串,而原字符串不發生改變。
若參數(第一個參數除外)不是字符串,則經過String()方法隱式轉換爲字符串,再進行字符串拼接
var stringValue = 'hello '; var result = stringValue.concat('world','!'); console.log(result);//'hello world!' console.log(stringValue);//'hello'
第一個參數只能是字符串,若是是其餘類型(數組除外)則報錯
(1).concat('2');//報錯 (true).concat('false');//報錯 ({}).concat('abc');//報錯因爲數組也存在concat()方法,參數會按照首先出現的參數是數組仍是字符串來決定如何轉換
'1,2,3,'.concat([4,5]);//'1,2,3,4,5' [1,2,3].concat(',4,5');//[1, 2, 3, ",4,5"]
【+】
var stringValue = 'hello '; console.log(stringValue.concat('world','!'));//'hello world!' console.log(stringValue + 'world' + '!');//'hello world!'
當操做數其中一個是字符串,或者對象轉換爲字符串時,才進行字符串拼接
1 + 2;//3 '1' + 2;//'12' var o = {valueOf:function(){return '1';}}; o + 2;//'12' var o = {valueOf:function(){return 1;}}; o + 2;//3
【3】建立子字符串
【slice()】
slice(start,end)方法須要兩個參數start和end,返回這個字符串中從start位置的字符到(但不包含)end位置的字符的一個子字符串。【對原字符串沒有影響】
若是end爲undefined或不存在,則返回從start位置到字符串結尾的全部字符
若是start是負數,則start = max(length + start,0)
若是end是負數,則end = max(length + end,0)
var stringValue = 'hello world'; console.log(stringValue.slice());//'hello world' console.log(stringValue.slice(2));//'llo world' console.log(stringValue.slice(2,undefined));//'llo world' console.log(stringValue.slice(2,-5));//'llo ' console.log(stringValue.slice(2,-20));//'' console.log(stringValue.slice(20));//'' console.log(stringValue.slice(-2,2));//'' console.log(stringValue.slice(-2,-20));//'' -----start和end沒法交換位置 console.log(stringValue.slice(-2,20));//'ld' console.log(stringValue.slice(-20,2));//'he' console.log(stringValue.slice(-20,-2));//'hello wor'
slice()方法涉及到Number()轉型函數的隱式類型轉換。
當start被轉換爲NaN時,至關於start = 0;當end被轉換爲NaN時(end爲undefined除外,至關於end=length),則輸出空字符串
var stringValue = 'hello world'; console.log(stringValue.slice(NaN));//'hello world' console.log(stringValue.slice(0,NaN));//'' console.log(stringValue.slice(true,[3]));//'el' console.log(stringValue.slice(null,undefined));//'hello world' console.log(stringValue.slice({}));//'hello world' console.log(stringValue.slice('2',[5]));//'llo'
【substring()】
substring(start,end)方法須要兩個參數start和end,返回這個字符串中從start位置的字符到(但不包含)end位置的字符的一個子字符串。【對原字符串沒有影響】
若是end爲undefined或不存在,則返回從start位置到字符串結尾的全部字符
若是任一參數是NaN或負數,則被0取代
若是任一參數大於字符串長度,則被字符串長度取代
若是start 大於 end,則交換它們的值
var stringValue = 'hello world'; console.log(stringValue.substring());//'hello world' console.log(stringValue.substring(2));//'llo world' console.log(stringValue.substring(2,undefined));//'llo world' console.log(stringValue.substring(20));//'' console.log(stringValue.substring(-2,2));//'he' console.log(stringValue.substring(NaN,2));//'he' console.log(stringValue.substring(-2,20));//'hello world' console.log(stringValue.substring(3,2));//'l' console.log(stringValue.substring(3,NaN));//'hel' console.log(stringValue.substring(-20,2));//'he' console.log(stringValue.substring(-20,-2));//''
substring()方法也涉及到Number()轉型函數的隱式類型轉換
var stringValue = 'hello world'; console.log(stringValue.substring(true,[3]));//'el' console.log(stringValue.substring(null,undefined));//'hello world' console.log(stringValue.substring({}));//'hello world' console.log(stringValue.substring('2',[5]));//'llo'
【substr()】-----【對原字符串沒有影響】
substr(start,end)方法須要兩個參數start和end,end表明返回的子字符串的字符個數;該方法返回這個字符串中從start位置的字符開始到end個字符的一個子字符串;
若是end爲undefined或不存在,則返回從start位置到字符串結尾的全部字符
若是start是負數,則start = max(length + start,0)
若是start是NaN,則至關於start = 0
若是end是負數或NaN,則end = 0,所以會返回空字符串
start和end沒法交換位置
[注意]該方法不是ECMAScript標準,已經被棄用
[注意]IE8-瀏覽器在處理向substr()傳遞負值的狀況時存在問題,它會返回原始的字符串
var stringValue = 'hello world'; console.log(stringValue.substr());//'hello world' console.log(stringValue.substr(2));//'llo world' console.log(stringValue.substr(2,undefined));//'llo world' console.log(stringValue.substr(2,NaN));//'' console.log(stringValue.substr(NaN,2));//'he' console.log(stringValue.substr(20));//'' console.log(stringValue.substr(-2,3));//'ld' console.log(stringValue.substr(-2,20));//'ld' console.log(stringValue.substr(-20,2));//'he' console.log(stringValue.substr(-20,-2));//'' console.log(stringValue.substr(2,5));//llo w
一樣地,substr()方法也涉及到Number()轉型函數的隱式類型轉換
var stringValue = 'hello world'; console.log(stringValue.substr(true,[3]));//'el' console.log(stringValue.substr(null,undefined));//'hello world' console.log(stringValue.substr({}));//'hello world' console.log(stringValue.substr('2',[5]));//'llo w'
對於以上三個建立子串的方法來講,若是是空字符串,則不管參數是什麼,仍然返回空字符串
var str = ''; console.log(str.slice(1));//'' console.log(str.substring(1));//'' console.log(str.substr(1));//''
【4】查找子字符串位置--------經過字符串查找位置
【indexOf()】
indexOf(searchString,start)方法接收searchString和start兩個參數,返回searchString首次出現的位置,若是沒有找到則返回-1。
searchString表示要搜索的子字符串;start表示該搜索的開始位置,若忽略該參數或該參數爲undefined、NaN或負數時,start = 0
該方法會隱式調用String()轉型函數,將searchString非字符串值轉換爲字符串;隱式調用Number()轉型函數,將start非數字值(undefined除外)轉換爲數值
var string = 'hello world world'; console.log(string.indexOf('ld'));//9 console.log(string.indexOf('ld',undefined));//9 console.log(string.indexOf('ld',NaN));//9 console.log(string.indexOf('ld',-1));//9 console.log(string.indexOf('ld',10));//15 console.log(string.indexOf('ld',[10]));//15 console.log(string.indexOf('true',[10]));//-1 console.log(string.indexOf(false,[10]));//-1
【lastIndexOf()】
與indexOf()不一樣,lastIndexOf()從右向左查找。
lastIndexOf(searchString,start)方法接收searchString和start兩個參數,返回searchString第一次出現的位置,若是沒有找到則返回-1
searchString表示要搜索的子字符串;start表示該搜索的開始位置,若忽略該參數或該參數爲undefined、NaN時,start = length - 1;若start爲負數,start = 0
一樣地,該方法會隱式調用String()轉型函數,將searchString非字符串值轉換爲字符串;隱式調用Number()轉型函數,將start非數字值(undefined除外)轉換爲數值
var string = 'hello world world'; console.log(string.lastIndexOf('ld'));//15 console.log(string.lastIndexOf('ld',undefined));//15 console.log(string.lastIndexOf('ld',NaN));//15 console.log(string.lastIndexOf('ld',-1));//-1 console.log(string.lastIndexOf('h',-1));//0 console.log(string.lastIndexOf('w',undefined));//12 console.log(string.lastIndexOf('ld',10));//9 console.log(string.lastIndexOf('ld',[10]));//9 console.log(string.lastIndexOf('true',[10]));//-1 console.log(string.lastIndexOf(false,[10]));//-1
查找出字符串全部符合條件的子字符串
function allIndexOf(str,value){ var result = []; var pos = str.indexOf(value); while(pos > -1){ result.push(pos); pos = str.indexOf(value,pos+value.length); } return result; } console.log(allIndexOf('helllhelllhelll','ll'));//[2,7,12]
lastIndexOf()方法經常使用於獲取URL地址中的擴展名
var url = "http://cnblogs.com/xiaohuochai.txt"; function getFileFormat(url){ var pos = url.lastIndexOf('.'); return url.slice(pos+1); } console.log(getFileFormat(url));//'txt'
【5】轉化爲數組
【split()】
split()方法基於指定的分隔符將一個字符串分割成多個字符串,並將結果放在一個數組中,分隔符能夠是字符串,也能夠是一個RegExp
該方法能夠接受第二個參數(可選)用於指定數組的大小,若是第二個參數爲0-array.length範圍內的值時按照指定參數輸出,其餘狀況將全部結果都輸出
若指定分隔符沒有出如今字符串中,則以數組的形式返回原字符串的值
[注意]參數中的正則表達式是否使用全局標誌g對結果沒有影響
var colorText = 'red,blue,green,yellow'; console.log(colorText.split(''));//["r", "e", "d", ",", "b", "l", "u", "e", ",", "g", "r", "e", "e", "n", ",", "y", "e", "l", "l", "o", "w"] console.log(colorText.split(','));//["red", "blue", "green", "yellow"] console.log(colorText.split(',',2));//["red", "blue"] console.log(colorText.split(',',6));//["red", "blue", "green", "yellow"] console.log(colorText.split('-'));//["red,blue,green,yellow"] console.log(colorText.split(/\,/));//["red", "blue", "green", "yellow"] console.log(colorText.split(/e/));//["r", "d,blu", ",gr", "", "n,y", "llow"] console.log(colorText.split(/[^\,]+/));//將除去逗號之外的字符串變爲分隔符["", ",", ",", ",", ""],IE8-會識別爲[",",",",","]