ES6學(xué)習(xí)筆記三|字符串?dāng)U展

1. 字符的Unicode表示法

如果直接在“\u”后面跟上超過(guò)0xFFFF的數(shù)值(比如\u20BB7),JavaScript會(huì)理解成“\u20BB+7”属愤。由于\u20BB是一個(gè)不可打印字符永高,所以只會(huì)顯示一個(gè)空格蔬胯,后面跟著一個(gè)7资盅。
ES6對(duì)這一點(diǎn)做出了改進(jìn)漓库,只要將碼點(diǎn)放入大括號(hào)羽峰,就能正確解讀該字符趟咆。

"\u{20BB7}"   // "??""
\u{41}\u{42}\u{43}"    // "ABC"
let hello = 123;
hell\u{6F}    // 123
'\u{1F680}' === '\uD83D\uDE80'   // true

有了這種表示法之后添瓷,JavaScript共有6種方法可以表示一個(gè)字符。

'\z' === 'z'  // true
'\172' === 'z' // true
'\x7A' === 'z' // true
'\u007A' === 'z' // true
'\u{7A}' === 'z' // true

2. codePointAt()

ES6提供了codePointAt方法值纱,能夠正確處理4個(gè)字節(jié)儲(chǔ)存的字符鳞贷,返回一個(gè)字符的碼點(diǎn)。

var s = '??a';
s.codePointAt(0) // 134071
s.codePointAt(1) // 57271
s.charCodeAt(2) // 97

3. String.fromCodePoint()

ES6提供了String.fromCodePoint方法虐唠,可以識(shí)別大于0xFFFF的字符悄晃,彌補(bǔ)了String.fromCharCode方法的不足。在作用上凿滤,正好與codePointAt方法相反妈橄。

4. 字符串的遍歷器接口

for (let codePoint of 'foo') {
    console.log(codePoint);
}    //"f","o","o"
  • 優(yōu)點(diǎn):可以識(shí)別大于0xFFFF的碼點(diǎn)。

5. at()

  • 優(yōu)點(diǎn):可以識(shí)別Unicode編號(hào)大于0xFFFF的字符翁脆,返回正確的字符眷蚓。
'abc'.at(0) // "a"
'??'.at(0) // "??"

6. normalize()

7. includes(),startsWith(),endsWith()

  • includes():返回布爾值,表示是否找到了參數(shù)字符串反番。
  • startsWith():返回布爾值沙热,表示參數(shù)字符串是否在源字符串的頭部。
  • endsWith():返回布爾值罢缸,表示參數(shù)字符串是否在源字符串的尾部篙贸。
    這三個(gè)方法都支持第二個(gè)參數(shù),表示開(kāi)始搜索的位置枫疆。

使用第二個(gè)參數(shù)n時(shí)爵川,endsWith的行為與其他兩個(gè)方法有所不同。它針對(duì)前n個(gè)字符息楔,而其他兩個(gè)方法針對(duì)從第n個(gè)位置直到字符串結(jié)束寝贡。

8. repeat()

  • repeat方法返回一個(gè)新字符串,表示將原字符串重復(fù)n次
  • 如果是小數(shù)值依,會(huì)被取整圃泡。
  • 如果參數(shù)是負(fù)數(shù)或者infinity,報(bào)錯(cuò)愿险。
  • 如果是0到-1之間的小數(shù)颇蜡,等同于0.
  • 參數(shù)NaN等同于0.
  • 如果參數(shù)是字符串辆亏,則會(huì)先轉(zhuǎn)換成數(shù)字风秤。

9. padStart(),padEnd()

ES6推出了字符串補(bǔ)全長(zhǎng)度的功能。如果某個(gè)字符串不夠指定長(zhǎng)度褒链,會(huì)在頭部或尾部補(bǔ)全唁情。padStart
用于頭部補(bǔ)全疑苔,padEnd用于尾部補(bǔ)全甫匹。

'x'.padStart(5, 'ab') // 'ababx'
'x'.padStart(4, 'ab') // 'abax'
'x'.padEnd(5, 'ab') // 'xabab'
'x'.padEnd(4, 'ab') // 'xaba'
  • 如果原字符串的長(zhǎng)度,等于或大于指定的最小長(zhǎng)度,則返回原字符串兵迅。
  • 如果用來(lái)補(bǔ)全的字符串與原字符串抢韭,兩者的長(zhǎng)度之和超過(guò)了指定的最小長(zhǎng)度,則會(huì)截去超出位數(shù)的補(bǔ)全字符串恍箭。
  • 如果省略第二個(gè)參數(shù)刻恭,則會(huì)用空格補(bǔ)全長(zhǎng)度。
  • padStart的常見(jiàn)用途是為數(shù)值補(bǔ)全指定位數(shù)扯夭。
'1'.padStart(10, '0') // "0000000001"
'12'.padStart(10, '0') // "0000000012"
'123456'.padStart(10, '0') // "0000123456"
  • 另一個(gè)用途是提示字符串格式鳍贾。
'12'.padStart(10, 'YYYY-MM-DD') // "YYYY-MM-12"
'09-12'.padStart(10, 'YYYY-MM-DD') // "YYYY-09-12"

10. 模板字符串

傳統(tǒng)的JavaScript語(yǔ)言,輸出模板如下:

$('#result').append( 
    'There are <b>' + basket.count + '</b> ' + 
    'items in your basket, ' + 
    '<em>' + basket.onSale + 
    '</em> are on sale!'
);

ES6引入了模板字符串交洗,如下:

$('#result').append(
    ` There are <b>${basket.count}</b> items 
    in your basket, <em>${basket.onSale}</em> 
    are on sale!`
);
  • 模板字符串中嵌入變量骑科,需要將變量名寫(xiě)在${}中。
function authorize(user, action) { 
    if (!user.hasPrivilege(action)) { 
        throw new Error(  
        // 傳統(tǒng)寫(xiě)法為  
        // 'User '  
        // + user.name  
        // + ' is not authorized to do '  
        // + action  
        // + '.' 
        `User ${user.name} is not authorized to do         ${action}.`); 
     }
}
  • 大括號(hào)內(nèi)部可以放入任意的JavaScript表達(dá)式构拳,可以進(jìn)行運(yùn)算咆爽,以及引用對(duì)象屬性。
var x =1; 
var y = 2;
'${x} + ${y} = ${x+y};
// 1 + 2 = 3
  • 模板字符串之中還能調(diào)用函數(shù)

如果大括號(hào)中的值不是字符串置森,將按照一般的規(guī)則轉(zhuǎn)為字符串斗埂。如:大括號(hào)中是一個(gè)對(duì)象,將默認(rèn)調(diào)用對(duì)象的toString方法凫海。

  • 如果模板字符串中的變量沒(méi)有聲明呛凶,報(bào)錯(cuò)。
  • 如果大括號(hào)中是一個(gè)字符串行贪,將原樣輸出把兔。
  • 模板字符串可以嵌套。

11. 標(biāo)簽?zāi)0?/h3>

模板字符串可以緊跟在一個(gè)函數(shù)后面瓮顽,該函數(shù)被調(diào)用來(lái)處理這個(gè)模板字符串县好。

alert '123';
//等同于
alert(123);

12. String.raw()

  • 該方法往往用來(lái)充當(dāng)模板字符串的處理函數(shù),返回一個(gè)斜杠都被轉(zhuǎn)義(即斜杠錢(qián)再加一個(gè)斜杠)的字符串暖混,對(duì)應(yīng)于替換變量后的模板字符串缕贡。
    String.rawHi\n${2+3}!;
    // "Hi\n5!"

    String.raw`Hi\u000A!`;
    // 'Hi\\u000A!'
    
  • 如果原字符串的斜杠已經(jīng)轉(zhuǎn)義,那么String.raw不會(huì)做任何處理拣播。

  • String.raw方法也可以作為正常的函數(shù)使用晾咪。這時(shí),它的第一個(gè)參數(shù)贮配,應(yīng)該是一個(gè)具有raw屬性的對(duì)象谍倦,且raw屬性的值應(yīng)該是一個(gè)數(shù)組。

String.raw({ raw: 'test' }, 0, 1, 2);// 't0e1s2t'
// 等同于
String.raw({ raw: ['t','e','s','t'] }, 0, 1, 2);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末泪勒,一起剝皮案震驚了整個(gè)濱河市昼蛀,隨后出現(xiàn)的幾起案子宴猾,更是在濱河造成了極大的恐慌,老刑警劉巖叼旋,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仇哆,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡夫植,警方通過(guò)查閱死者的電腦和手機(jī)讹剔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)详民,“玉大人延欠,你說(shuō)我怎么就攤上這事∩蚩纾” “怎么了衫冻?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)谒出。 經(jīng)常有香客問(wèn)我隅俘,道長(zhǎng),這世上最難降的妖魔是什么笤喳? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任为居,我火速辦了婚禮,結(jié)果婚禮上杀狡,老公的妹妹穿的比我還像新娘蒙畴。我一直安慰自己,他們只是感情好呜象,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布膳凝。 她就那樣靜靜地躺著,像睡著了一般恭陡。 火紅的嫁衣襯著肌膚如雪蹬音。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 50,084評(píng)論 1 291
  • 那天休玩,我揣著相機(jī)與錄音著淆,去河邊找鬼。 笑死拴疤,一個(gè)胖子當(dāng)著我的面吹牛永部,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播呐矾,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蓉坎,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼猬错!你這毒婦竟也來(lái)了阵漏?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤祭埂,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡衫画,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年毫炉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瓮栗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡瞄勾,死狀恐怖费奸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情进陡,我是刑警寧澤愿阐,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布,位于F島的核電站趾疚,受9級(jí)特大地震影響缨历,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜糙麦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一辛孵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赡磅,春花似錦魄缚、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至咆瘟,卻和暖如春嚼隘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背袒餐。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工嗓蘑, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人匿乃。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓桩皿,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親幢炸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子泄隔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容