4.字符串的擴(kuò)展

來(lái)源:http://es6.ruanyifeng.com/?search=keys&x=0&y=0#docs/string#%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E9%81%8D%E5%8E%86%E5%99%A8%E6%8E%A5%E5%8F%A3

  1. 字符的 Unicode 表示法
  2. 字符串的遍歷器接口
  3. 直接輸入 U+2028 和 U+2029
  4. JSON.stringify() 的改造
  5. 模板字符串
  6. 實(shí)例:模板編譯
  7. 標(biāo)簽?zāi)0?/a>
  8. 模板字符串的限制

1.字符串unicode表示法

ES6 加強(qiáng)了對(duì) Unicode 的支持搪花,允許采用\uxxxx形式表示一個(gè)字符妄帘,其中xxxx表示字符的 Unicode 碼點(diǎn)

"\u0061"
// "a"

但是逗柴,這種表示法只限于碼點(diǎn)在\u0000~\uFFFF之間的字符。超出這個(gè)范圍的字符,必須用兩個(gè)雙字節(jié)的形式表示。

2.字符串的遍歷器接口

ES6 為字符串添加了遍歷器接口(詳見(jiàn)《Iterator》一章),使得字符串可以被for...of循環(huán)遍歷

for (let codePoint of 'foo') {
  console.log(codePoint)
}
// "f"
// "o"
// "o"

4.JSON.stringify() 的改造

根據(jù)標(biāo)準(zhǔn)狸相,JSON 數(shù)據(jù)必須是 UTF-8 編碼。但是捐川,現(xiàn)在的JSON.stringify()方法有可能返回不符合 UTF-8 標(biāo)準(zhǔn)的字符串脓鹃。

5.模板字符串

傳統(tǒng)的 JavaScript 語(yǔ)言,輸出模板通常是這樣寫(xiě)的(下面使用了 jQuery 的方法)古沥。

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

上面這種寫(xiě)法相當(dāng)繁瑣不方便瘸右,ES6 引入了模板字符串解決這個(gè)問(wèn)題。

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

模板字符串(template string)是增強(qiáng)版的字符串岩齿,用反引號(hào)(`)標(biāo)識(shí)太颤。它可以當(dāng)作普通字符串使用,也可以用來(lái)定義多行字符串盹沈,或者在字符串中嵌入變量龄章。

// 普通字符串
`In JavaScript '\n' is a line-feed.`

// 多行字符串
`In JavaScript this is
 not legal.`

console.log(`string text line 1
string text line 2`);

// 字符串中嵌入變量
let name = "Bob", time = "today";
`Hello ${name}, how are you ${time}?`
$('#list').html(`
<ul>
  <li>first</li>
  <li>second</li>
</ul>
`);

上面代碼中,所有模板字符串的空格和換行乞封,都是被保留的做裙,比如<ul>標(biāo)簽前面會(huì)有一個(gè)換行。如果你不想要這個(gè)換行肃晚,可以使用trim方法消除它锚贱。

$('#list').html(`
<ul>
  <li>first</li>
  <li>second</li>
</ul>
`.trim());

大括號(hào)內(nèi)部可以放入任意的 JavaScript 表達(dá)式,可以進(jìn)行運(yùn)算关串,以及引用對(duì)象屬性拧廊。

let x = 1;
let y = 2;

`${x} + ${y} = ${x + y}`
// "1 + 2 = 3"

`${x} + ${y * 2} = ${x + y * 2}`
// "1 + 4 = 5"

let obj = {x: 1, y: 2};
`${obj.x + obj.y}`
// "3"

模板字符串之中還能調(diào)用函數(shù)杂穷。

function fn() {
  return "Hello World";
}

`foo ${fn()} bar`
// foo Hello World bar

由于模板字符串的大括號(hào)內(nèi)部,就是執(zhí)行 JavaScript 代碼卦绣,因此如果大括號(hào)內(nèi)部是一個(gè)字符串,將會(huì)原樣輸出飞蚓。

`Hello ${'World'}`
// "Hello World"

模板字符串甚至還能嵌套滤港。

const tmpl = addrs => `
  <table>
  ${addrs.map(addr => `
    <tr><td>${addr.first}</td></tr>
    <tr><td>${addr.last}</td></tr>
  `).join('')}
  </table>
`;

上面代碼中,模板字符串的變量之中趴拧,又嵌入了另一個(gè)模板字符串溅漾,使用方法如下。

const data = [
    { first: '<Jane>', last: 'Bond' },
    { first: 'Lars', last: '<Croft>' },
];

console.log(tmpl(data));
// <table>
//
//   <tr><td><Jane></td></tr>
//   <tr><td>Bond</td></tr>
//
//   <tr><td>Lars</td></tr>
//   <tr><td><Croft></td></tr>
//
// </table>

如果需要引用模板字符串本身著榴,在需要時(shí)執(zhí)行添履,可以寫(xiě)成函數(shù)。

let func = (name) => `Hello ${name}!`;
func('Jack') // "Hello Jack!"

上面代碼中脑又,模板字符串寫(xiě)成了一個(gè)函數(shù)的返回值暮胧。執(zhí)行這個(gè)函數(shù),就相當(dāng)于執(zhí)行這個(gè)模板字符串了问麸。

其他

function tag(stringArr, ...values){
  console.log(stringArr) //{a:'1'}
  console.log(values) //[ {b:2},{c:3} ]
}
tag({a:'1'},{b:2},{c:3})
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末往衷,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子严卖,更是在濱河造成了極大的恐慌席舍,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,835評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哮笆,死亡現(xiàn)場(chǎng)離奇詭異来颤,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)稠肘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,900評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門(mén)福铅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人启具,你說(shuō)我怎么就攤上這事本讥。” “怎么了鲁冯?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,481評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵拷沸,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我薯演,道長(zhǎng)撞芍,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,303評(píng)論 1 282
  • 正文 為了忘掉前任跨扮,我火速辦了婚禮序无,結(jié)果婚禮上验毡,老公的妹妹穿的比我還像新娘。我一直安慰自己帝嗡,他們只是感情好晶通,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,375評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著哟玷,像睡著了一般狮辽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上巢寡,一...
    開(kāi)封第一講書(shū)人閱讀 49,729評(píng)論 1 289
  • 那天喉脖,我揣著相機(jī)與錄音,去河邊找鬼抑月。 笑死树叽,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的谦絮。 我是一名探鬼主播题诵,決...
    沈念sama閱讀 38,877評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼挨稿!你這毒婦竟也來(lái)了仇轻?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,633評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤奶甘,失蹤者是張志新(化名)和其女友劉穎篷店,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體臭家,經(jīng)...
    沈念sama閱讀 44,088評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡疲陕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,443評(píng)論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了钉赁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蹄殃。...
    茶點(diǎn)故事閱讀 38,563評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖你踩,靈堂內(nèi)的尸體忽然破棺而出诅岩,到底是詐尸還是另有隱情,我是刑警寧澤带膜,帶...
    沈念sama閱讀 34,251評(píng)論 4 328
  • 正文 年R本政府宣布吩谦,位于F島的核電站,受9級(jí)特大地震影響膝藕,放射性物質(zhì)發(fā)生泄漏式廷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,827評(píng)論 3 312
  • 文/蒙蒙 一芭挽、第九天 我趴在偏房一處隱蔽的房頂上張望滑废。 院中可真熱鬧蝗肪,春花似錦、人聲如沸蠕趁。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,712評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)俺陋。三九已至逛绵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間倔韭,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,943評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工瓢对, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留寿酌,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,240評(píng)論 2 360
  • 正文 我出身青樓硕蛹,卻偏偏與公主長(zhǎng)得像醇疼,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子法焰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,435評(píng)論 2 348

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