認(rèn)識JS里的字符串
JavaScript里面的字符串就是用雙引號或者單引號引起來的內(nèi)容,要注意不同的引號可以嵌套但不可以交叉使用。
我們可以借助轉(zhuǎn)義字符去表示我們的字符串里面的引號。
字符串換行時,可以使用 + 級聯(lián)運(yùn)算符 或者 反斜杠表示是一個字符串。
字符串可以通過 單 / 雙引號 來創(chuàng)建,也可以通過 new 操作法(不推薦這種方式,會拖慢執(zhí)行速度)
var x = "Bill";
var y = new String("Bill"); // 不推薦這種方式,會拖慢執(zhí)行速度
x == y 為 true,因?yàn)?x 和 y 的值相等
x === y 為 false,因?yàn)?x 和 y 的值相等,但 x 是 String ,y 是 Object。
字符串有一個 屬性 length ,表示字符串的 長度(即有多少個字符)
字符串中 字符的位置 從 0 開始計(jì)數(shù)
轉(zhuǎn)為字符串
toString()
沒錯,JS里的字符串也有toString()方法
因?yàn)?br>
ECMAScript 定義所有對象都有 toString() 方法,無論它是偽對象,還是真對象。
ECMAScript 的 Boolean 值、數(shù)字和字符串的原始值是偽對象,具有屬性和方法。
查找索引
indexOf() , lastIndexOf() , search()
indexOf()
stringObject.indexOf ( searchvalue, [fromindex] )
在一個字符串中的指定位置從前往后搜索,大小寫敏感,默認(rèn)從 0 處開始檢索
- 參數(shù):
searchvalue:String類型 , 檢索的字符串
fromindex:[ 0, length -1] 的整數(shù),可選參數(shù) ,規(guī)定開始檢索的位置。沒規(guī)定時,從0開始檢索
fromindex為 負(fù)數(shù)(相當(dāng)于從0開始),浮點(diǎn)數(shù)(取整), >= length的數(shù)(永遠(yuǎn)返回-1),都不會報錯。 - 返回值:
startIndex: 檢索到的與searchvalue 相匹配的子串的起始位置(不一定是searchvalue 在字符串中第一次出現(xiàn)的位置)
-1 : 沒有檢索到子串(不一定是字符串中沒有子串) - 應(yīng)用:
某個指定的字符串值在字符串中首次出現(xiàn)的位置
var str = '123uiui123';
str.indexOf("123", 12); // -1
str.indexOf("123", -10); //0
str.indexOf("123"); //0
lastIndexOf()
stringObject.lastIndexOf ( searchvalue, [fromindex] )
在一個字符串中的指定位置從后向前搜索,大小寫敏感,默認(rèn)從length -1 處開始檢索
var str = '123uiui123';
var index1 = str.lastIndexOf("123", 12); // 7
var index2 = str.lastIndexOf("123", -10); //0
var index3 = str.lastIndexOf("123"); //7
search()
stringObject.search ( regexp | searchvalue )
檢索字符串中指定的子字符串
或檢索與正則表達(dá)式相匹配的子字符串
不執(zhí)行全局匹配,忽略標(biāo)志 g。忽略 regexp 的 lastIndex 屬性
從字符串的開始進(jìn)行檢索
- 參數(shù):
regexp :檢索的 RegExp 對象
searchvalue :String類型,檢索的子串 - 返回值:
index:stringObject 中第一個與 regexp 或者 searchvalue 相匹配的子串的起始位置。
-1 : stringObject 中沒有該子串 - 應(yīng)用:
var str = '123uiui123';
str.search("123"); // 0
str.search(/123/g); //0
str.search(/123/); //0
查找字符
charAt(),charCodeAt()
charAt(), charCodeAt()
stringObject.charAt(index)
通過下標(biāo)檢索字符串里的字符
stringObject.charCodeAt(index)
通過下標(biāo)檢索字符串里的字符的 Unicode 編碼。
- 參數(shù):
index:[0, length-1] 的整數(shù) - 返回值:
下標(biāo)位的字符:當(dāng) index 屬于 [0, length-1]
空字符串:當(dāng) Index 不是合法的輸入的時候,沒有查找到,就返回 空字符串
var str = '123uiui123';
str.charAt(1); // 2
str.charCodeAt(1); //50
str.charAt(26); // 空字符串
str.charAt(-1); // 空字符串
str.charAt(1.2); // 2,不會報錯,盡量不要有這種寫法
提取部分字符串
slice() , substring(),substr()
slice()
slice( start, [end] )
- 參數(shù):
整數(shù)
-1 ------最后一個字符
-2 ------倒數(shù)第二個字符……
end 未寫 表示 提取到最后 - 返回值:
提取的字符串,
substring()
stringObject.substring( start, [stop] )
- 參數(shù):
自然數(shù),若start > stop , 該方法先交換這兩個參數(shù)。 - 返回值:
空串:
start === stop
輸出非法,沒有提取到字符串
子串:
substr()
stringObject.substr ( start, [length] )
- 參數(shù):
start:整數(shù)
-1 ------最后一個字符
-2 ------倒數(shù)第二個字符……
length:
子串的 length
未寫 表示 提取到最后 - 返回值:
抽取的子串
替換字符串內(nèi)容
replace(), toUpperCase() , toLowerCase()
replace()
stringObject.replace ( regexp | substr, replacement )
用一些字符替換另一些字符,或替換一個與正則表達(dá)式匹配的子串
- 參數(shù):
regexp:規(guī)定要替換的模式的 RegExp 對象。
substr:規(guī)定要替換的模式的 字符串。
replacement:一個字符串值。規(guī)定了替換文本或生成替換文本的函數(shù)。
如果要替換的模式 是一個字符串,則將它作為要檢索的直接量文本模式,而不是首先被轉(zhuǎn)換為 RegExp 對象。 - 返回值:
一個新的字符串,是用 replacement 替換了 regexp | substr 的第一次匹配或所有匹配之后得到的。 - 應(yīng)用:
刪除字符串里面的空白字符:
var str = ' 123 uiui 123';
var str2 = str.replace(/\s/g,"");
console.log("str2",str2);
console.log("str",str);

toUpperCase(), toLowerCase()
返回的字符串全為 大|小 寫
字符串連接
concat()
stringObject.concat() 與 Array.concat() 很相似。
使用 + 操作符 代替這個函數(shù) 更簡潔一些!不怎么使用
字符串轉(zhuǎn)為數(shù)組
split()
split()
stringObject.split ( separator, [howmany] )
- 參數(shù)
separator:字符串或正則表達(dá)式,從該參數(shù)指定的地方分割 stringObject。
howmany:返回的數(shù)組的最大長度。
如果設(shè)置了該參數(shù),返回的子串不會多于這個參數(shù)指定的數(shù)組。
如果沒有設(shè)置該參數(shù),整個字符串都會被分割,不考慮它的長度。 - 返回值:數(shù)組
separator 為字符串時,不包括 separator 自身
separator 是包含子表達(dá)式的正則表達(dá)式,那么返回的數(shù)組中包括與這些子表達(dá)式匹配的字串(但不包括與整個正則表達(dá)式匹配的文本)。
var str = '123uiui123';
console.log(str.split(""));

其他函數(shù)
trim()
trim()
刪除字符串兩端的空白符
charCodeAt(),fromCharCode()
charCodeAt() 查找一個字符串中指定索引位置的字符的 Unicode 值
fromCharCode()接收一個或多個 Unicode 值,即要創(chuàng)建的字符串中的字符的 Unicode 編碼。String 的靜態(tài)方法
語法:
String.fromCharCode(numX,[numX,……])
stringObject.charCodeAt(index)
小例子——字符串編碼的面試題
輸入的字符串規(guī)則:由數(shù)字和26個英文字母的大小寫組成
加密規(guī)則:
- 數(shù)字 +1 ,9變?yōu)?
- 字母 變?yōu)橄乱粋€字母 ,并轉(zhuǎn)變大小寫,z變?yōu)锳 ,Z變?yōu)閍
function change(str){
var code_A = "A".charCodeAt(0); //65
var code_a = "a".charCodeAt(0); //97
var arr = str.replace(/\s/g, "").split("");
var newArr = arr.map((item, index) => {
if(isNaN(Number(item))){
var code_item = item.charCodeAt(0);
if(code_item >= code_A && code_item < code_a){
// 字符為 大寫
var new_code = code_item - code_A + code_a + 1;
if(new_code === code_a + 26){
new_code = code_a;
}
item = String.fromCharCode(new_code);
return item;
} else {
// 字符為小寫
var new_code = code_item - code_a + code_A + 1;
if(new_code === code_A + 26){
new_code = code_A;
}
item = String.fromCharCode(new_code);
return item;
}
} else {
item = Number(item);
item += 1;
if(item === 10){
item = 0;
}
return item;
}
});
console.log(newArr.join(""));
}
change("12A39z0Z"); //23b40A1a