当前位置: 首页 > Web前端 > HTML5

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

时间:2023-04-05 21:13:37 HTML5

ES2018新特性异步迭代器正则表达式reverse(lookbehind)assert正则表达式Unicode转义非转义序列的模板字符串(本文)正则表达式Formulas/dotAllModeRegularExpressionNamedCaptureGroupObjectExpansionOperatorPromise.prototype.finally此ECMAScript提案“TemplateLiteralRevision”由TimDisney负责,已进入第4阶段。此提案是ECMAScript2018(ES9)的一部分。这个提案让我们在使用模板字符串的标记函数的语法上有更多的自由。1.TaggedfunctionsTaggedtemplates标签使您能够用函数解析模板字符串。label函数的第一个参数包含一个字符串值数组。其余参数与表达式有关。最后,您的函数可以返回处理后的字符串(或者可以返回完全不同的内容)。functionfoo(str){returnstr[0].toUpperCase();}foo`justjavac`;//输出JUSTJAVACfoo`Xyz`;//输出XYZ2。String.raw()String.raw()是一个模板字符串的标签功能,类似于Python中的字符串前缀r和C#中的字符串前缀@,用于获取模板字符串的原始字面值。语法:String.raw(callSite,...substitutions)String.raw`templateString`String.raw()是唯一内置的模板字符串标签函数。varstr=String.raw`Hi\n${2+3}!`;//"Hi\n5!"str.length;//字符串长度为6str.split('').join(',');//分隔字符串//结果是:"H,i,\,n,5,!"3.原始字符串在label函数的第一个参数中有一个特殊的属性raw,我们可以通过它访问模板字符串的原始字符串,无需特殊字符替换。函数foo(str){console.log(str);returnstr[0].toUpperCase();}foo`justjavac`;//控制台输出["justjavac",raw:["justjavac"]]foo`just\\java\\c`;//控制台输出["just\java\c",raw:["just\\java\\c"]]4.标记函数的转义序列从ES2016开始,以标签的模板字面量遵循以下转义序列的规则:Unicode字符以“u”开头,例如\u00A9Unicode码位用“u{}”表示,例如\u{2F804}十六进制以“x”开头,例如\xA9八进制以“”和一个数字开头,例如\251对于每个ECMAScript语法,解析器都会寻找有效的转义序列,对于无效的转义序列,直接抛出SyntaxError:String.raw`\`;未捕获的语法错误:未终止的模板文字5。ES2018关于非法转义序列的修正案标记函数的模板字符串应该允许嵌套支持常见转义序列的语言(例如DSL、LaTeX)。因此,ECMAScript2018标准取消了对标记模板字符串中ECMAScript转义序列的句法限制。functiontag(strs){strs[0]===undefinedstrs.raw[0]==="\\unicodeand\\u{55}";}//在tag函数中使用tag`\unicode和\你{55}`;//结果未定义//不要在标签函数中使用它letbad=`badescapesequence:\unicode`;//throwsearlyerror:SyntaxError:InvalidUnicodeescapesequence6.实施V8-Chrome62SpiderMonkey-Firefox53JavaScriptCore-版本未知ChakraCore-开发Babel-7.x7。相关链接:https://github.com/tc39/propo...https://tc39.github.io/propos...https://developer.mozilla.org...