es6常用語(yǔ)法字符串?dāng)U展

s6新增三種api方法補(bǔ)充indexOf方法

  1. includes():返回布爾值,表示是否找到了參數(shù)字符串。
  2. startsWith():返回布爾值,表示參數(shù)字符串是否在源字符串的頭部晤揣。
  3. endsWith():返回布爾值,表示參數(shù)字符串是否在源字符串的尾部朱灿。
var s = 'hello world!';
s.startsWith('hello')//true
s.endsWith('!')//true
s.includes('0')//true
  1. 這三個(gè)方法都支持第二個(gè)參數(shù)昧识,表示開(kāi)始搜索位置。
s.startsWith('world',6)//true
s.endsWith('hello',5)//true
s.includes('hello',6)//false

repeat()方法

'x'.repeat(3);//xxx
//參數(shù)如果是小數(shù)盗扒,會(huì)被取整
'na'.repeat(2.9)//'nana'
//如果repeat的參數(shù)是負(fù)數(shù)或者infinity跪楞,會(huì)報(bào)錯(cuò)
//但是,如果參數(shù)是0到-1之間的小數(shù)侣灶,則等同于0甸祭,這是因?yàn)闀?huì)先進(jìn)行取整運(yùn)算。
0到-1之間的小數(shù)褥影,取整以后等于-0池户,repeat視同為0。
'na'.repeat(-0.9) // ""
//參數(shù)NaN等同于0。
//如果repeat的參數(shù)是字符串校焦,則會(huì)先轉(zhuǎn)換成數(shù)字赊抖。
'na'.repeat('na') // ""
'na'.repeat('3') // "nanana"

padStart(),padEnd()方法

  1. ES2017引入了字符串補(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'
  1. 如果原字符串的長(zhǎng)度报亩,等于或大于指定的最小長(zhǎng)度,則返回原字符串墓猎。
'xxx'.padStart(2, 'ab') // 'xxx'
'xxx'.padEnd(2, 'ab') // 'xxx'
  1. 如果用來(lái)補(bǔ)全的字符串與原字符串捆昏,兩者的長(zhǎng)度之和超過(guò)了指定的最小長(zhǎng)度赚楚, 則會(huì)截去超出位數(shù)的補(bǔ)全字符串毙沾。
'abc'.padStart(10, '0123456789')
// '0123456abc'
  1. 如果省略第二個(gè)參數(shù),默認(rèn)使用空格補(bǔ)全長(zhǎng)度宠页。
'x'.padStart(4) // '   x'
'x'.padEnd(4) // 'x   '
  1. padStart的常見(jiàn)用途是為數(shù)值補(bǔ)全指定位數(shù)左胞。下面代碼生成10位的數(shù)值字符串。
'1'.padStart(10, '0') // "0000000001"
'12'.padStart(10, '0') // "0000000012"
'123456'.padStart(10, '0') // "0000123456"
  1. 另一個(gè)用途是提示字符串格式举户。
'12'.padStart(10, 'YYYY-MM-DD') // "YYYY-MM-12"
'09-12'.padStart(10, 'YYYY-MM-DD') // "YYYY-09-12"

模板字符串

  1. 傳統(tǒng)的JavaScript語(yǔ)言烤宙,輸出模板通常是這樣寫(xiě)的
$('#result').append(
  'There are <b>' + basket.count + '</b> ' +
  'items in your basket, ' +
  '<em>' + basket.onSale +
  '</em> are on sale!'
);
  1. 上面這種寫(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!
`);
  1. 模板字符串(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`);

// 字符串中嵌入變量
var name = "Bob", time = "today";
`Hello ${name}, how are you ${time}?`
  1. 上面代碼中的模板字符串近她,都是用反引號(hào)表示叉瘩。
    如果在模板字符串中需要使用反引號(hào),則前面要用反斜杠轉(zhuǎn)義粘捎。
var greeting = `\`Yo\` World!`;
  1. 如果使用模板字符串表示多行字符串薇缅,所有的空格和縮進(jìn)都會(huì)被保留在輸出之中。
$('#list').html(`
<ul>
  <li>first</li>
  <li>second</li>
</ul>
`);
  1. 上面代碼中攒磨,所有模板字符串的空格和換行泳桦,都是被保留的,
    比如<ul>標(biāo)簽前面會(huì)有一個(gè)換行娩缰。如果你不想要這個(gè)換行灸撰,可以使用trim方法消除它。
$('#list').html(`
<ul>
  <li>first</li>
  <li>second</li>
</ul>
`.trim());
  1. 模板字符串中嵌入變量,需要將變量名寫(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}.`);
   }
 }
  1. 大括號(hào)內(nèi)部可以放入任意的JavaScript表達(dá)式狱掂,可以進(jìn)行運(yùn)算,以及引用對(duì)象屬性亲轨。
  var x = 1;
  var y = 2;

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

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

  var obj = {x: 1, y: 2};
  `${obj.x + obj.y}`
  // 3
  1. 模板字符串之中還能調(diào)用函數(shù)趋惨。
  function fn() {
    return "Hello World";
  }

  `foo ${fn()} bar`
  // foo Hello World bar
  1. 如果大括號(hào)中的值不是字符串,將按照一般的規(guī)則轉(zhuǎn)為字符串惦蚊。
    比如器虾,大括號(hào)中是一個(gè)對(duì)象,將默認(rèn)調(diào)用對(duì)象的toString方法蹦锋。
    如果模板字符串中的變量沒(méi)有聲明兆沙,將報(bào)錯(cuò)。
// 變量place沒(méi)有聲明
var msg = `Hello, ${place}`;
// 報(bào)錯(cuò)
  1. 由于模板字符串的大括號(hào)內(nèi)部莉掂,
    就是執(zhí)行JavaScript代碼葛圃,因此如果大括號(hào)內(nèi)部是一個(gè)字符串,將會(huì)原樣輸出憎妙。
`Hello ${'World'}`
// "Hello World"
  1. 模板字符串甚至還能嵌套库正。
const tmpl = addrs => `
  <table>
  ${addrs.map(addr => `
    <tr><td>${addr.first}</td></tr>
    <tr><td>${addr.last}</td></tr>
  `).join('')}
  </table>
`;
  1. 上面代碼中,模板字符串的變量之中厘唾,又嵌入了另一個(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>
  1. 如果需要引用模板字符串本身抚垃,在需要時(shí)執(zhí)行喷楣,可以像下面這樣寫(xiě)。
  // 寫(xiě)法一
  let str = 'return ' + '`Hello ${name}!`';
  let func = new Function('name', str);
  func('Jack') // "Hello Jack!"

  // 寫(xiě)法二
  let str = '(name) => `Hello ${name}!`';
  let func = eval.call(null, str);
  func('Jack') // "Hello Jack!"
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鹤树,一起剝皮案震驚了整個(gè)濱河市铣焊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌魂迄,老刑警劉巖粗截,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異捣炬,居然都是意外死亡熊昌,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)湿酸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)婿屹,“玉大人,你說(shuō)我怎么就攤上這事推溃“豪” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蜂奸。 經(jīng)常有香客問(wèn)我犁苏,道長(zhǎng),這世上最難降的妖魔是什么扩所? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任围详,我火速辦了婚禮,結(jié)果婚禮上祖屏,老公的妹妹穿的比我還像新娘助赞。我一直安慰自己,他們只是感情好袁勺,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布雹食。 她就那樣靜靜地躺著,像睡著了一般期丰。 火紅的嫁衣襯著肌膚如雪群叶。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,692評(píng)論 1 305
  • 那天咐汞,我揣著相機(jī)與錄音盖呼,去河邊找鬼。 笑死化撕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的约炎。 我是一名探鬼主播植阴,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼圾浅!你這毒婦竟也來(lái)了掠手?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤狸捕,失蹤者是張志新(化名)和其女友劉穎喷鸽,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體灸拍,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡做祝,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鸡岗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片混槐。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖轩性,靈堂內(nèi)的尸體忽然破棺而出声登,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布悯嗓,位于F島的核電站件舵,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏脯厨。R本人自食惡果不足惜芦圾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望俄认。 院中可真熱鬧个少,春花似錦、人聲如沸眯杏。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)岂贩。三九已至茫经,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間萎津,已是汗流浹背卸伞。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留锉屈,地道東北人荤傲。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像颈渊,于是被迫代替她去往敵國(guó)和親遂黍。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

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