美文网首页
字符串的扩展

字符串的扩展

作者: Jason_Shu | 来源:发表于2019-01-14 13:30 被阅读0次

一. includes(), startsWith(), endsWith()

传统语法中,提供了「indexOf」方法来判断一个字符是否在「目标字符串」中。

  • includes(): 返回布尔值,判断「目标字符串」中是否有「参数字符串」
  • startsWith(): 返回布尔值,判断「参数字符串」是否在「目标字符串」的头部。
  • endsWith(): 返回布尔值,判断「参数字符串」是否在「目标字符串」的尾部。

比如:

let s = 'Hello world!';

s.startsWith('Hello') // true
s.endsWith('!') // true
s.includes('o') // true

这三种方法还可以有第二个参数,是表示开始搜索的位置。

let s = 'Hello world!';

s.startsWith('world', 6) // true
s.endsWith('Hello', 5) // true
s.includes('Hello', 6) // false

二. repeat()
repeat(string, n), 返回一个「新字符串」,表示将原字符串重复n次。

比如:

'x'.repeat(3) // "xxx"
'hello'.repeat(2) // "hellohello"
'na'.repeat(0) // ""

三. padStart(), padEnd()
字符串补全功能,如果某个字符串不够指定长度,会在头部或者尾部补全。padStart()用于头部补全,padEnd()用于尾部补全。

'123'.padStart(5, 'x'); // 'xx123'
'123'.padEnd(5, 'x'); // '123xx'

四. 模板字符串
这个「模板字符串」其实就是字符串的增强版。传统的javascript,可能存在下述的模板写法。

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

使用「模板字符串」后:

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

有一个「细节」要注意。如果使用模板字符串表示多行字符串,所有的空格和缩进都会被保留在输出之中。

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

上述代码中,所有模板字符串的空格和换行,都是被保留的,比如<ul>标签前面会有一个换行。如果你不想要这个换行,可以使用trim方法消除它。

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

五. 标签模板
「模板字符串」还可以用在「函数」后面。该函数用来处理这个「模板字符串」。

alert`123`
// 等价于
alert('123')
let a = 5;
let b = 10;

tag`Hello!${a + b} world ${a * b}`;
//  等价于
tag(['Hello!', 'world', ''], 15, 50);

上述代码中,为啥tag的第一个参数中的数组多了个''元素?因为在「模板字符串」中,是以「{}」为分割符号的,最后的「{a * b}」和「`」之间虽然没有字符,但是还是会分割出「''」来。

函数「tag」依次会接收到多个参数。

function tag(stringArr, value1, value2){
  // ...
}

// 等同于

function tag(stringArr, ...values){
  // ...
}

上述的「stringArr」和「...values」组合起来可以用「arguments」一起拿到。

来个复杂的例子。

let total = 30;
let msg = passthru`The total is ${total} (${total*1.05} with tax)`;

function passthru(literals) {
  let result = '';
  let i = 0;

  while (i < literals.length) {
    result += literals[i++];
    if (i < arguments.length) {
      result += arguments[i];
    }
  }

  return result;
}

msg // "The total is 30 (31.5 with tax)"

「标签模板」的一个重要应用,就是过滤 HTML 字符串,防止用户输入恶意内容。

let message =
  SaferHTML`<p>${sender} has sent you a message.</p>`;

function SaferHTML(templateData) {
  let s = templateData[0];
  for (let i = 1; i < arguments.length; i++) {
    let arg = String(arguments[i]);

    // Escape special characters in the substitution.
    s += arg.replace(/&/g, "&amp;")
            .replace(/</g, "&lt;")
            .replace(/>/g, "&gt;");

    // Don't escape special characters in the template.
    s += templateData[i];
  }
  return s;
}

六. String.raw()
该方法主要往往用来充当模板字符串的处理函数,返回一个斜杠都被转义(即斜杠前面再加一个斜杠)的字符串,对应于替换变量后的模板字符串。「返回原生String对象」

String.raw`Hi\n${2+3}!`;
// 返回 "Hi\\n5!"

String.raw`Hi\u000A!`;
// 返回 "Hi\\u000A!"

参考:http://es6.ruanyifeng.com/#docs/string

相关文章

  • ES6扩展

    字符串扩展 正则扩展 数值扩展 函数扩展 对象扩展 数组扩展 字符串扩展 模版字符串 部分新的方法 padStar...

  • 2017-12-26es6-函数扩展

    扩展 1、字符串扩展 2、模板字符串 **** 3、数值扩展 4、函数扩展用于分页居多 rest 参数 ...变量...

  • ES6扩展

    字符串的扩展正则的扩展数值的扩展数组的扩展函数的扩展对象的扩展

  • Vue项目开发与规范--es6语法规范篇

    目录 简介 let const 解构赋值 正则的扩展 字符串的扩展 数值的扩展 数组的扩展 函数的扩展 对象的扩展...

  • JS基础系列(X): ES6入门

    字符串扩展 模板字符串模板字符串可以很方便的代替ES5字符串拼接,格式如下: 代码示例 API 函数扩展 函数默认...

  • ECMAScript 6 新增内容

    变量的扩展letconst变量的结构 字符串的扩展及新增方法模板字符串 (`${}`)matchAll 方法返回一...

  • ES6基础-ES6的扩展

    进行对字符串扩展,正则扩展,数值扩展,函数扩展,对象扩展,数组扩展。 开发环境准备: 编辑器(VS Code, A...

  • 十五、字符串转数字

    字符串转数组 字符串 *待扩展:传递与复制扩展 函数式编程和改变原始数据的编程方法

  • 字符串、数组、函数、对象

    字符串 多行字符串 字符串模板 数组 扩展 函数参数的扩展 类数组对象转数组 函数 默认值 以下两种写法的区别? ...

  • 《ECMAScript 6 入门》笔记

    变量的解构赋值 字符串的扩展 正则的扩展 数值的扩展 函数的扩展 数组的扩展 对象的扩展 对象的新增方法 表单验证...

网友评论

      本文标题:字符串的扩展

      本文链接:https://www.haomeiwen.com/subject/lcpddqtx.html