热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ES2018新特性之:非转义序列的模板字符串

ES2018新特征异步迭代器正则表达式反向(lookbehind)断言正则表达式Unicode转义非转义序列的模板字符串(本文)正则表达式sdotAll形式正则表达式定名捕捉组对象

ES2018 新特征

  • 异步迭代器
  • 正则表达式反向(lookbehind)断言
  • 正则表达式 Unicode 转义
  • 非转义序列的模板字符串(本文)
  • 正则表达式 s/dotAll 形式
  • 正则表达式定名捕捉组
  • 对象睁开运算符
  • Promise.prototype.finally

这个 ECMAScript 提案 “Template Literal Revision” 由 Tim Disney 担任,现在已进入 stage 4,本提案是 ECMAScript 2018(ES9) 的一部分。该提案让我们运用模板字符串的标签函数语法越发的自在。

1. 标签函数 Tagged templates

标签使您能够用函数剖析模板字符串。标签函数的第一个参数包括一个字符串值的数组。其他的参数与表达式相干。末了,你的函数能够返回处理好的的字符串(或许它能够返回完整差别的东西)。

function foo(str) {
return str[0].toUpperCase();
}
foo`justjavac`; // 输出 JUSTJAVAC
foo`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;
// 字符串长度为 6
str.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 关于不法转义序列的订正

带标签函数的模版字符串应当许可嵌套支撑罕见转义序列的言语(比方 DSLs、LaTeX)。

因而 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. 完成

  • V8 – Chrome 62
  • SpiderMonkey – Firefox 53
  • JavascriptCore – 版本未知
  • ChakraCore – 开辟中
  • Babel – 7.x

7. 相干链接:

  • https://github.com/tc39/propo…
  • https://tc39.github.io/propos…
  • https://developer.mozilla.org…

推荐阅读
  • PNG在IE6下透明问题的解决办法
    2019独角兽企业重金招聘Python工程师标准做Web开发的朋友一定都知道PNG是一个相当不错的图片格式,但是这个好的格式却在IE6时代造成了麻烦࿰ ... [详细]
  • 在实际开发中,现在安卓端和后台之间的数据交互,一般都是用JSON来传递数据信息。JSON大家一般都比较熟悉。我这边就以实际项目中的后台传过来的情况和大家分析下及如何处理。比如后台返 ... [详细]
  • 最近想用js做一个简单的计算器,不过网上的例子好像大部分都是直接从左到右挨个计算,就好像1+2*5,就会先计算1+2,再计算3*5,并没有实现运算符的优先级,这里找到了一种方法实现,来总结一下。不过这 ... [详细]
  • 找出字符串中重复字符
    2019独角兽企业重金招聘Python工程师标准packagejavaBasic;importjava.util.HashMap;importjava.util.Map; ... [详细]
  • 2022年Python面试题一.Python基础二.企业面试题结束语🥇🥇🥇✅作者简介:大家好我是编程IDὌ ... [详细]
  • 1.什么是hashcode方法?hashcode方法返回对象的哈希码值在应用程序的执行期间,只要对象的equals方法的比较操作所用到的信息没有改变& ... [详细]
  • 接口自动化相关面试题
    你好,我是懂Java的测试最近辅导简历,有同学向我反馈,自学过接口自动化、没有落地接口自动化项目办?还有很多同学落地实践过自 ... [详细]
  • 开发笔记:携程2019校招编程题
    本文由编程笔记#小编为大家整理,主要介绍了携程2019校招编程题相关的知识,希望对你有一定的参考价值。携程今年的机试题为20道选择+3编程由于今天最后提交时第三题 ... [详细]
  • 1、创建高级对象使用构造函数来创建对象构造函数是一个函数,调用它来例示并初始化特殊类型的对象。可以使用new关键字来调用一个构造函数。下面给出了使用构造函数的新示例。 ... [详细]
  • 开发笔记:js正则表达式属性及方法的使用
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了js正则表达式属性及方法的使用相关的知识,希望对你有一定的参考价值。正则表达式直接量 ... [详细]
  • JNI技术实践小结转自http:sett ... [详细]
  • 我正在使用数组列表通过构建一个交互式菜单供用户选择来存储来自用户输入的值。到目前为止,我的两个选择是为用户提供向列表输入数据和读取列表的全部内容。到目前为止,我创建的代码由两个类组成。 ... [详细]
  • (一)javax.mail.Session:Session类代表JavaMail中的一次邮件会话.每个基于JavaMail的应用程序至少有一次会话,也可以产生多次会话.发送邮件之前 ... [详细]
  • 一、在androidStudio中实现tabs比较简单,新建项目就可以选择tabs模板进行创建,默认实现tabs功能:直接运行项目就可以看到效果:可以说非常简单,但是我们在实际开发 ... [详细]
  • Givens1,s2,s3,findwhethers3isformedbytheinterleavingofs1ands2.Forexample,Given:s1aabcc ... [详细]
author-avatar
贪婪黑夜面_780
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有