博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ES2018 新特征之:非转义序列的模板字符串
阅读量:6984 次
发布时间:2019-06-27

本文共 1653 字,大约阅读时间需要 5 分钟。

ES2018 新特性

  • 非转义序列的模板字符串(本文)

这个 ECMAScript 提案 “” 由 Tim Disney 负责,目前已经进入 stage 4,本提案是 ECMAScript 2018(ES9) 的一部分。该提案让我们使用模板字符串的标签函数语法更加的自由。

1. 标签函数 Tagged templates

标签使您可以用函数解析模板字符串。标签函数的第一个参数包含一个字符串值的数组。其余的参数与表达式相关。最后,你的函数可以返回处理好的的字符串(或者它可以返回完全不同的东西)。

function foo(str) {    return str[0].toUpperCase();}foo`justjavac`; // 输出 JUSTJAVACfoo`Xyz`; // 输出 XYZ

2. String.raw()

String.raw() 是一个模板字符串的标签函数,它的作用类似于 Python 中的字符串前缀 r 和 C# 中的字符串前缀 @,是用来获取一个模板字符串的原始字面量值的。

语法:

String.raw(callSite, ...substitutions)String.raw`templateString`

String.raw() 是唯一一个内置的模板字符串标签函数。

var str = String.raw`Hi\n${2+3}!`;// "Hi\n5!"str.length;// 字符串长度为 6str.split('').join(',');// 分隔字符串// 结果是:"H,i,\,n,5,!"

3. 原始字符串

在标签函数的第一个参数中,存在一个特殊的属性 raw,我们可以通过它来访问模板字符串的原始字符串,而不经过特殊字符的替换。

function foo(str) {    console.log(str);    return str[0].toUpperCase();}foo`justjavac`;// 控制台输出["justjavac", raw: ["justjavac"]]foo`just\\java\\c`;// 控制台输出["just\java\c", raw: ["just\\java\\c"]]

4. 带标签函数的转义序列

自 ES2016 起,带标签的模版字面量遵守以下转义序列的规则:

  • Unicode字符以"u"开头,例如 \u00A9
  • Unicode码位用"u{}"表示,例如 \u{2F804}
  • 十六进制以"x"开头,例如 \xA9
  • 八进制以""和数字开头,例如 \251

对于每一个 ECMAScript 语法,解析器都会去查找有效的转义序列,对于无效的转义序列,直接抛出 SyntaxError

String.raw`\`;Uncaught SyntaxError: Unterminated template literal

5. ES2018 关于非法转义序列的修订

带标签函数的模版字符串应该允许嵌套支持常见转义序列的语言(例如 、)。

因此 ECMAScript 2018 标准移除了对 ECMAScript 在带标签的模版字符串中转义序列的语法限制。

function tag(strs) {  strs[0] === undefined  strs.raw[0] === "\\unicode and \\u{55}";}// 在标签函数中使用tag`\unicode and \u{55}`; // 结果是 undefined// 不在标签函数中使用let bad = `bad escape sequence: \unicode`;// throws early error:SyntaxError: Invalid Unicode escape sequence

6. 实现

  • - Chrome 62
  • - Firefox 53
  • - 版本未知
  • - 开发中
  • - 7.x

7. 相关链接:

转载地址:http://oltpl.baihongyu.com/

你可能感兴趣的文章
AD 脚本kixtart运用之六(outlook邮件批量生成签名)
查看>>
Tomcat 日志
查看>>
优化SQL查询:如何写出高性能SQL语句
查看>>
误删/etc/passwd的修复
查看>>
Linux图形界面与命令行模式切换
查看>>
CSS选择器
查看>>
UV认证应用安全标准的目的
查看>>
用VisualVM分析MyEclipse
查看>>
在android开发中使用multdex的方法-IT蓝豹为你整理
查看>>
Oracle创建表空间和用户
查看>>
基于IP访问控制的局限性
查看>>
yum安装源是出现报冲突错误,解决办法
查看>>
简单易用的库存管理软件、进销存软件
查看>>
docker WARNING: IPv4 forwarding is disabled. 解决方法
查看>>
Tomcat+Nginx+Memcached集群部署
查看>>
通过FFMPEG代码学习函数指针和指针函数
查看>>
H3 BPM MVC表单SheetOffice控件使用分享
查看>>
mysql innodb和myisam比较
查看>>
命令tree
查看>>
vue.js+vscode+visual studio在windows下搭建开发环境
查看>>