es6第四章學(xué)習(xí)

es6第四章學(xué)習(xí)

字符串的擴(kuò)展

1.字符的 Unicode 表示法
  • ES6 加強(qiáng)了對(duì) Unicode 的支持装哆,允許采用\uxxxx形式表示一個(gè)字符载庭,其中xxxx表示字符的 Unicode 碼點(diǎn)统捶。"\u0061" // "a"
  • 這種表示法只限于碼點(diǎn)在\u0000~\uFFFF之間的字符鸽素。超出這個(gè)范圍的字符务甥,必須用兩個(gè)雙字節(jié)的形式表示。ES6 對(duì)這一點(diǎn)做出了改進(jìn)呜袁,只要將碼點(diǎn)放入大括號(hào),就能正確解讀該字符简珠。
  • 因此JavaScript 共有 6 種方法可以表示一個(gè)字符阶界。
'\z' === 'z'  // true
'\172' === 'z' // true
'\x7A' === 'z' // true
'\u007A' === 'z' // true
'\u{7A}' === 'z' // true
2.字符串的遍歷器接口
  • ES6 為字符串添加了遍歷器接口(詳見《Iterator》一章),使得字符串可以被for...of循環(huán)遍歷聋庵。
for (let codePoint of 'foo') {
  console.log(codePoint)
}
// "f"
// "o"
// "o"

除了遍歷字符串膘融,這個(gè)遍歷器最大的優(yōu)點(diǎn)是可以識(shí)別大于0xFFFF的碼點(diǎn),傳統(tǒng)的for循環(huán)無法識(shí)別這樣的碼點(diǎn)祭玉。

3.直接輸入U(xiǎn)+2028 和 U+2029

  • JavaScript 字符串允許直接輸入字符氧映,以及輸入字符的轉(zhuǎn)義形式。例如'中' === '\u4e2d' // true
  • 但是脱货,JavaScript 規(guī)定有5個(gè)字符岛都,不能在字符串里面直接使用,只能使用轉(zhuǎn)義形式振峻。
  • U+005C:反斜杠(reverse solidus)
  • U+000D:回車(carriage return)
  • U+2028:行分隔符(line separator)
  • U+2029:段分隔符(paragraph separator)
  • U+000A:換行符(line feed)

4.JSON.stringify() 的改造

  • 根據(jù)標(biāo)準(zhǔn)臼疫,JSON 數(shù)據(jù)必須是 UTF-8 編碼。但是扣孟,現(xiàn)在的JSON.stringify()方法有可能返回不符合 UTF-8 標(biāo)準(zhǔn)的字符串烫堤。UTF-8 標(biāo)準(zhǔn)規(guī)定,0xD800到0xDFFF之間的碼點(diǎn)哈打,不能單獨(dú)使用塔逃,必須配對(duì)使用,JSON.stringify()的問題在于料仗,它可能返回0xD800到0xDFFF之間的單個(gè)碼點(diǎn)湾盗。
  • 為了確保返回的是合法的 UTF-8 字符,ES2019 改變了JSON.stringify()的行為立轧。如果遇到0xD800到0xDFFF之間的單個(gè)碼點(diǎn)格粪,或者不存在的配對(duì)形式躏吊,它會(huì)返回轉(zhuǎn)義字符串,留給應(yīng)用自己決定下一步的處理帐萎。

5.模板字符串

  • 傳統(tǒng)的 JavaScript 語言比伏,輸出模板通常是這樣寫的(下面使用了 jQuery 的方法)。
$('#result').append(
  'There are <b>' + basket.count + '</b> ' +
  'items in your basket, ' +
  '<em>' + basket.onSale +
  '</em> are on sale!'
);
  • 上面這種寫法相當(dāng)繁瑣不方便疆导,ES6 引入了模板字符串解決這個(gè)問題赁项。
$('#result').append(`
  There are <b>${basket.count}</b> items
   in your basket, <em>${basket.onSale}</em>
  are on sale!
`);

6.標(biāo)簽?zāi)0?/h4>

模板字符串的功能,不僅僅是上面這些澈段。它可以緊跟在一個(gè)函數(shù)名后面悠菜,該函數(shù)將被調(diào)用來處理這個(gè)模板字符串。這被稱為“標(biāo)簽?zāi)0濉惫δ埽╰agged template)败富。

alert`123`
// 等同于
alert(123)

“標(biāo)簽”指的就是函數(shù)悔醋,緊跟在后面的模板字符串就是它的參數(shù),但是,如果模板字符里面有變量兽叮,就不是簡單的調(diào)用了芬骄,而是會(huì)將模板字符串先處理成多個(gè)參數(shù),再調(diào)用函數(shù)鹦聪。

let a = 5;
let b = 10;

tag`Hello ${ a + b } world ${ a * b }`;
// 等同于
tag(['Hello ', ' world ', ''], 15, 50);
  • “標(biāo)簽?zāi)0濉钡囊粋€(gè)重要應(yīng)用账阻,就是過濾 HTML 字符串,防止用戶輸入惡意內(nèi)容椎麦。
  • 標(biāo)簽?zāi)0宓牧硪粋€(gè)應(yīng)用宰僧,就是多語言轉(zhuǎn)換(國際化處理)。
  • 除此之外观挎,你甚至可以使用標(biāo)簽?zāi)0迩俣?JavaScript 語言之中嵌入其他語言。

7.模板字符串的限制

  • 前面提到標(biāo)簽?zāi)0謇锩驵医荩梢詢?nèi)嵌其他語言造成。但是,模板字符串默認(rèn)會(huì)將字符串轉(zhuǎn)義雄嚣,導(dǎo)致無法嵌入其他語言晒屎。
  • 為了解決這個(gè)問題,ES2018 放松了對(duì)標(biāo)簽?zāi)0謇锩娴淖址D(zhuǎn)義的限制缓升。如果遇到不合法的字符串轉(zhuǎn)義鼓鲁,就返回undefined,而不是報(bào)錯(cuò)港谊,并且從raw屬性上面可以得到原始字符串骇吭。
  • 注意,這種對(duì)字符串轉(zhuǎn)義的放松歧寺,只在標(biāo)簽?zāi)0褰馕鲎址畷r(shí)生效燥狰,不是標(biāo)簽?zāi)0宓膱龊霞辏廊粫?huì)報(bào)錯(cuò)。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末龙致,一起剝皮案震驚了整個(gè)濱河市蛀缝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌目代,老刑警劉巖屈梁,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異像啼,居然都是意外死亡俘闯,警方通過查閱死者的電腦和手機(jī)潭苞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門忽冻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人此疹,你說我怎么就攤上這事僧诚。” “怎么了蝗碎?”我有些...
    開封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵湖笨,是天一觀的道長。 經(jīng)常有香客問我蹦骑,道長慈省,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任眠菇,我火速辦了婚禮边败,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘捎废。我一直安慰自己笑窜,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開白布登疗。 她就那樣靜靜地躺著排截,像睡著了一般。 火紅的嫁衣襯著肌膚如雪辐益。 梳的紋絲不亂的頭發(fā)上断傲,一...
    開封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音智政,去河邊找鬼认罩。 笑死,一個(gè)胖子當(dāng)著我的面吹牛女仰,可吹牛的內(nèi)容都是我干的猜年。 我是一名探鬼主播抡锈,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼乔外!你這毒婦竟也來了床三?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤杨幼,失蹤者是張志新(化名)和其女友劉穎撇簿,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體差购,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡四瘫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了欲逃。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片找蜜。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖稳析,靈堂內(nèi)的尸體忽然破棺而出洗做,到底是詐尸還是另有隱情,我是刑警寧澤彰居,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布诚纸,位于F島的核電站,受9級(jí)特大地震影響陈惰,放射性物質(zhì)發(fā)生泄漏畦徘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一抬闯、第九天 我趴在偏房一處隱蔽的房頂上張望井辆。 院中可真熱鬧,春花似錦画髓、人聲如沸掘剪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽夺谁。三九已至,卻和暖如春肉微,著一層夾襖步出監(jiān)牢的瞬間匾鸥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來泰國打工碉纳, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留勿负,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓劳曹,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子盗蟆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

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

  • ES6加強(qiáng)了對(duì)Unicode的支持,并且擴(kuò)展了字符串對(duì)象 字符的Unicode表示法 JavaScript允許用\...
    瑤九九閱讀 352評(píng)論 0 1
  • 字符的 Unicode 表示法 codePointAt() String.fromCodePoint() 字符串的...
    卞卞村長L閱讀 743評(píng)論 0 0
  • 三房资,字符串?dāng)U展 3.1 Unicode表示法 ES6 做出了改進(jìn),只要將碼點(diǎn)放入大括號(hào)檀头,就能正確解讀該字符轰异。有了這...
    eastbaby閱讀 1,514評(píng)論 0 8
  • 官方中文版原文鏈接 感謝社區(qū)中各位的大力支持,譯者再次奉上一點(diǎn)點(diǎn)福利:阿里云產(chǎn)品券暑始,享受所有官網(wǎng)優(yōu)惠搭独,并抽取幸運(yùn)大...
    HetfieldJoe閱讀 2,889評(píng)論 0 16
  • ES6加強(qiáng)了對(duì)Unicode的支持,并且擴(kuò)展了字符串對(duì)象廊镜。 字符的Unicode表示法 JavaScript允許采...
    陳老板_閱讀 325評(píng)論 0 0