模板字符串

  • 传统写法

    var str = 'There are <b>' + basket.count + '</b> ' +
    'items in your basket, ' +
    '<em>' + basket.onSale +
    '</em> are on sale!'

    ES6写法

  • let  str = ` There are <b>${basket.count}</b> items
    in your basket, <em>${basket.onSale}</em>
    are on sale!`

    注意:模板字符串中的换行和空格都是会被保留的
    变量名写在 ${} 中,${} 中可以放入 JavaScript 表达式。

标签模板

  模板字符串的功能,不仅仅是上面这些。它可以紧跟在一个函数名后面,该函数将被调用来处理这个模板字符串。这被称为“标签模板”功能(tagged template)。

    • 模板字符串中没有变量

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

      标签模板其实不是模板,而是函数调用的一种特殊形式。“标签”指的就是函数,紧跟在后面的模板字符串就是它的参数。

    • 模板字符串中含有变量
      let a = 5;
      let b = 10; tag`Hello ${ a + b } world ${ a * b }`;
      // 等同于
      tag(['Hello ', ' world ', ''], 15, 50);

      如果模板字符里面有变量,就不是简单的调用了,而是会将模板字符串先处理成多个参数,再调用函数。上面代码中,

      模板字符串前面有一个标识名tag,它是一个函数。整个表达式的返回值,就是tag函数处理模板字符串后的返回值。

                         tag函数的第一个参数是一个数组,该数组的成员是模板字符串中那些没有变量替换的部分,

      也就是说,变量替换只发生在数组的第一个成员与第二个成员之间、第二个成员与第三个成员之间,以此类推。

                         tag函数的其他参数,都是模板字符串各个变量被替换后的值。由于本例中,模板字符串含有两个变量,因此tag会接受到value1value2两个参数。

                       tag函数所有参数的实际值如下。

      • 第一个参数:['Hello ', ' world ', '']
      • 第二个参数: 15
      • 第三个参数:50

      也就是说,tag函数实际上以下面的形式调用。

    • demo2
      function f(stringArr,...values){
      let result = "";
      for(let i=0;i<stringArr.length;i++){
      result += stringArr[i];
      if(values[i]){
      result += values[i];
      }
      }
      return result;
      }
      let name = 'Mike';
      let age = 27;
      f`My Name is ${name},I am ${age+1} years old next year.`;
      // "My Name is Mike,I am 28 years old next year." f`My Name is ${name},I am ${age+1} years old next year.`;
      // 等价于
      f(['My Name is',',I am ',' years old next year.'],'Mike',28);

方法

  • 子串的识别

    ES6 之前判断字符串是否包含子串,用 indexOf 方法,ES6 新增了子串的识别方法。

    • includes():返回布尔值,判断是否找到参数字符串。
    • startsWith():返回布尔值,判断参数字符串是否在原字符串的头部。
    • endsWith():返回布尔值,判断参数字符串是否在原字符串的尾部。

    以上三个方法都可以接受两个参数,需要搜索的字符串,和可选的搜索起始位置索引。

    let string = "apple,banana,orange";
    string.includes("banana"); // true
    string.startsWith("apple"); // true
    string.endsWith("apple"); // false
    string.startsWith("banana",6) // true

    注意点:

    • 这三个方法只返回布尔值,如果需要知道子串的位置,还是得用 indexOf 和 lastIndexOf 。
    • 这三个方法如果传入了正则表达式而不是字符串,会抛出错误。而 indexOf 和 lastIndexOf 这两个方法,它们会将正则表达式转换为字符串并搜索它。
  • 字符串重复

    repeat():返回新的字符串,表示将字符串重复指定次数返回。 

    • 1.参数如果是小数,会被向下取整。

      'na'.repeat(2.9) // "nana"
    • 如果参数是 0 到-1 之间的小数,则等同于 0,这是因为会先进行取整运算。0 到-1 之间的小数,取整以后等于-0repeat视同为 0。
      'na'.repeat(-0.9) // ""
    • 如果参数是 NaN,等同于 repeat 零次
      'na'.repeat(NaN) // ""
    • 如果参数是负数或者 Infinity ,会报错:
      'na'.repeat(Infinity)
      // RangeError
      'na'.repeat(-1)
      // RangeError
    • 如果repeat的参数是字符串,则会先转换成数字。
      'na'.repeat('na') // ""
      'na'.repeat('3') // "nanana"
  • 字符串补全 

    • padStart:返回新的字符串,表示用参数字符串从头部(左侧)补全原字符串。
    • padEnd:返回新的字符串,表示用参数字符串从尾部(右侧)补全原字符串。

      以上两个方法接受两个参数,
          第一个参数是指定生成的字符串的最小长度,
          第二个参数是用来补全的字符串。如果没有指定第二个参数,默认用空格填充。

      • 正常用法

        console.log("h".padStart(5,"o"));  // "ooooh"
        console.log("h".padEnd(5,"o")); // "hoooo"
        console.log("h".padStart(5)); // " h"
      • 如果指定的长度小于或者等于原字符串的长度,则返回原字符串:
        console.log("hello".padStart(5,"A"));  // "hello"
      • 如果原字符串加上补全字符串长度大于指定长度,则截去超出位数的补全字符串:
        console.log("hello".padEnd(10,",world!"));  // "hello,worl"
      • 常见用途
        • 为数值补全指定位数下面代码生成 10 位的数值字符串。

          '1'.padStart(10, '0') // "0000000001"
          '12'.padStart(10, '0') // "0000000012"
          '123456'.padStart(10, '0') // "0000123456"
        • 提示字符串格式
          '12'.padStart(10, 'YYYY-MM-DD') // "YYYY-MM-12"
          '09-12'.padStart(10, 'YYYY-MM-DD') // "YYYY-09-12"

      

 

   

【ES6 】ES6 字符串扩展及新增方法的更多相关文章

  1. ES6对象的扩展及新增方法

    1.属性的简洁表示法 ES6允许直接写入变量和函数,作为对象的属性和方法.这样的书写更加简洁. const foo = 'bar'; const baz = {foo}; baz//{foo:'bar ...

  2. ES6中字符串扩展

    ES6中字符串扩展 ① for...of 遍历字符串: 例如: for(let codePoint of 'string'){ console.log(codePoint) } 运行结果: ②  in ...

  3. ES6之字符串扩展方法(常用)

    es6这个String对象倒是扩展了不少方法,但是很多都是跟字符编码相关,个人选了几个感觉比较常用的方法: includes 搜索字符的神器 还记得我们之前如何判断某个字符串对象是否包含特地字符的吗? ...

  4. ES6 ( 三 ) 字符串扩展

    一.字符Unicode表示方法 ES6中可以使用以下6种方法表示字符 '\z' === 'z' // true '\172' === 'z' // true '\x7A' === 'z' // tru ...

  5. [js]es6语法: 字符串和数组的方法

    s的方法 根据index取value: 取首尾项,arr[0], arr[arr.length-1] 根据value取index(判断是否包含子字符串): s.indexOf 栗子: 'maotai' ...

  6. es6+字符串string的新增方法函数

    String.includes("xxx")   返回true/false     [es5的字符串查找方法:String.indexOf() ] String.startsWit ...

  7. ES6之字符串扩展

    ES6字符串新增的常用方法: 1. includes(): 字符串中是否包含某个字符或字符串, 包含的两个字符必须是相连的 let str = 'hello, world' str.includes( ...

  8. ES6学习笔记(对象新增方法)

    1.Object.is() ES5 比较两个值是否相等,只有两个运算符:相等运算符(==)和严格相等运算符(===).它们都有缺点,前者会自动转换数据类型,后者的NaN不等于自身,以及+0等于-0. ...

  9. ES6 之 字符串扩展

    字符串所有的方法,不会修改字符串本身(字符串是不可变的),操作完成会 返回一个新的字符串. 将一个值转化为字符串,.toString()方法,但是null和undefined值没有这个方法, 1.字符 ...

随机推荐

  1. 如何卸载oracle11g

    方法/步骤   .关闭oracle所有的服务.可以在windows的服务管理器中关闭:   打开注册表:regedit 打开路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentCo ...

  2. dll程序开发总结

    1.修改生成的dll名称 VS2012中选中某个项目,项目--属性--配置属性--连接器--常规--输出文件

  3. PHP学习之文件上传类

    <?php $up = new Upload(); $newPath = $up->uploadFile('fm'); if ($newPath === false) { var_dump ...

  4. Flask-分开Models解决循环引用

    Flask-分开Models解决循环引用 在之前我们测试中,所有语句都在同一个文件中,但随着项目越来越大,管理起来有所不便,所以将Models分离.基本的文件结构如下 \—–app.py\—–mode ...

  5. mysql报错解决

    1044, "Access denied for user 'root'@'192.168.0.%' to database 'test'" 是因为创建这个test数据库时候没有给 ...

  6. php命令行模式下加载的php.ini文件可能和web模式下加载的php.ini不一致

    php命令行模式下加载的php.ini文件可能和web模式下加载的php.ini不一致 命令行下查看加载的php.ini的路径: php -i|grep php.ini web模式下查看: <? ...

  7. html5 商品分类页面效果zepto

    点击左边容器条目,右边列表对应的内容置顶显示,滑动右边的列表,左边容器的对应的标题高亮显示. 效果图如下: 代码: <!doctype html> <html> <hea ...

  8. mysql写存储过程根据时间变化增加工龄

    在工作中遇到要程序根据时间自动增加工龄的需求. php没办法自己发起请求,又不想在服务器上写计划任务crontab,通过用户请求来更改又不能保证用户会去操作. 用数据库的存储过程和事件来完成. 数据库 ...

  9. Linear regression with one variable - Model representation

    摘要: 本文是吴恩达 (Andrew Ng)老师<机器学习>课程,第二章<单变量线性回归>中第6课时<模型概述>的视频原文字幕.为本人在视频学习过程中逐字逐句记录下 ...

  10. img的src为空的时候,去除灰色的边框