String可用字面量或new方法創(chuàng)建抚芦,String字面量可使用任何String對象的方法倍谜,因?yàn)閖s自動將String字面量轉(zhuǎn)換為臨時的String Object迈螟,調(diào)用String方法,然后移除String Object尔崔。
盡量使用String字面量答毫,String對象會有一些異常的行為。例:【為什么季春?】
var s1 = '2 + 2';
var s2 = new String('2 + 2');
eval(s1); //返回?cái)?shù)值:4
eval(s2); //返回string: '2 + 2'
String是不可變類數(shù)組對象洗搂,不能通過索引更改單獨(dú)的字符,例:
var str = 'hello';
str[0] = 'A';
console(str[0]); //打釉嘏:'h'
String有3種返回字符串指定部分的方法:
1. substring(start, end): start,end均為非負(fù)整數(shù)耘拇;若任一參數(shù)<0或NaN,視為0宇攻;若start > end惫叛,則兩者交換數(shù)值;
2. substr(start, length): start可為負(fù)數(shù)逞刷,表示從尾部算起嘉涌,-1表示最后一個字符,若負(fù)數(shù)絕對值超過長度夸浅,視為0洛心;length表示子串長度;(js沒有對該方法進(jìn)行標(biāo)準(zhǔn)化题篷,不建議使用)
3. slice(start, end): start,end可為負(fù)數(shù);在Array中也有定義厅目;
String返回字符或字符編碼的方法:
1. charAt(index): 返回索引位置的字符番枚,若沒有參數(shù),默認(rèn)為0损敷;若索引位置沒有字符葫笼,則返回'';
2. charCodeAt(index): 返回索引位置的字符編碼的十進(jìn)制數(shù)值(<2^16拗馒,2個字節(jié))路星;若索引位置沒有字符,則返回NaN诱桂;
3. codePointAt(index): 返回索引位置開始的字符Unicode編碼(代理對或碼元)的十進(jìn)制數(shù)值(<0x110000洋丐,4個字節(jié));若索引位置沒有字符挥等,則返回undefined友绝;
String返回子串索引位置的方法:
1. indexOf(searchString, index): 從>=index的子串中搜索'searchString'的索引位置,index默認(rèn)值為0肝劲。若沒有找到searchString迁客,則返回-1郭宝;
2. lastIndexOf(searchString, index): 從<=index的子串中'searchString'的索引位置,index默認(rèn)值為字符串長度掷漱;
String判斷包含特定子串:
1. startsWidth(searchString, index): 開始位置為index粘室,index默認(rèn)為0;
2. endsWidth(searchString, index): index默認(rèn)為length卜范;
3. includes(searchString, index): 從>=index開始搜索衔统,默認(rèn)為0;
String拼接方法:
concat(...args),args為一個list先朦,js將args每個元素用toString()轉(zhuǎn)換為字符串缰冤,即NaN\null\undefined均可拼接;
String分割為數(shù)組:
split(sep, limit),sep若為空字符串'',則返回單獨(dú)字符數(shù)組喳魏,注意若包含復(fù)雜字符(代理對)棉浸,復(fù)雜字符會分割為兩個碼元;若this對象為空字符串'',則返回結(jié)果依賴于sep是否能匹配空字符串刺彩,例如:
var x = ''.split('x'); //x=['']迷郑;長度為1,包含一個空字符串
var y = ''.split(''); //y=[]创倔;空數(shù)組嗡害,長度為0
若sep未定義,則返回包含this字符串的長度為1的數(shù)組畦攘;limit為數(shù)組最大長度霸妹,默認(rèn)為2^32-1;
String使用正則的方法:(在正則章節(jié)詳細(xì)查看)
1. match(regexp): 調(diào)用正則[@@match]方法知押,與regSymbol.match返回結(jié)果, 不含regexp不含'g'修飾符則與reg.exec(str)返回結(jié)果相同叹螟;
2. replace(searchValue, replaceValue): 調(diào)用正則的[@@replace]方法,與reg[Symbol.replace](str, replaceValue)
3. search(regexp): 調(diào)用正則的[@@search]方法
大小寫轉(zhuǎn)換:toLowerCase(),toUpperCase()台盯;
生成重復(fù)字符串:ES2015新增內(nèi)容罢绽,repeat(cnt),cnt為重復(fù)次數(shù),cnt>0,cnt!=+無窮静盅,cnt為浮點(diǎn)良价,向下取整floor();repeat()是個泛函蒿叠;
減去字符串兩端重復(fù)空格方法:trim()
多行模板字面量(Multi-line template literals):使用`符號替代引號明垢;
允許換行,允許以${expression}植入表達(dá)式栈虚,例:
var x = 1, y = 2;
var z = `x + y = ${x+y}` \\z='x + y = 3'
tag方法:允許將模板字面量解析作為函數(shù)參數(shù)解析 【怎么用袖外?為什么用?】
原始string(raw):String.raw(template, ...sustitutions)
tips:
'+'操作符魂务,若放在變量前可轉(zhuǎn)換為數(shù)值類型(Number)曼验,待確認(rèn)泌射,例:
var x = +'0x10';
x==y運(yùn)算符:
- x, y為null或undefined, 返回true;
- x, y為String/Number/Boolean, 返回Number(x)==Number(y);
- x為String/Number/Symbol,y為Object鬓照,返回x==原始值(y);