ES9,全称为 ECMAScript 2018,是 JavaScript 语言的最新版本。其中包括了很多新特性,其中涉及到了 JSON 和正则表达式的更新。本文将详细介绍这些新特性的更新内容,并通过示例代码来演示其使用。
JSON 的新特性
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。在 ES9 中,JSON 有了以下更新:
支持直接转义 U+2028 和 U+2029
在 ES5 中,JSON 输出时需要手动将 U+2028 和 U+2029 转义为\u2028 和\u2029,而在 ES9 中,JSON 直接支持这两个转义字符的输出。
-- -------------------- ---- ------- -- --- - ------------ ----- -- - ------------------- - ---- ----------------------- - -- --- - ------------ ----- -- - --------- ---- - ---- --------- -------- -
允许 NUL 字符 (\u0000) 作为字符串
在 ES5 中,使用 JSON.stringify() 方法将带有 \u0000 字符的字符串进行 JSON 编码时会抛出异常。但在 ES9 中,允许 NUL 字符作为字符串一部分。
// ES5:会抛出异常 JSON.stringify("\u0000"); // ES9:输出 \u0000 JSON.stringify("\u0000");
支持在 JSON.parse() 中使用 reviver 函数的第二个参数
JSON.parse() 方法允许通过第二个可选参数来提供一个"reviver"函数,在解析过程中修改解析出的属性对应的值。在 ES9 中,该 reviver 函数现在可以接收第二个参数,该参数是属性键名及其值的位置。
const jsonData = '{"key": "value"}' const reviver = (key, value, position) => { console.log(`key: ${key}, value: ${value}, position: ${position}`) return value } JSON.parse(jsonData, reviver)
在上面的例子中,reviver 函数打印出了每个属性键名及其值在 JSON 文本中的位置。
正则表达式的新特性
正则表达式是一种高级模式匹配语言,JS 中自 ES6 就有了很多正则表达式的新特性。在 ES9 中,正则表达式有了如下新特性:
支持 s 修饰符
在 ES9 前,正则表达式中使用(.)匹配除换行符外的任意字符。在 ES9 中,可以在正则表达式末尾添加 s 修饰符,则(.)可以匹配任何字符,包括\n。
const str = 'aaa\naaa' const regExp = /a.*a/s console.log(regExp.test(str)) // true
支持 named capture groups
ES9 支持在正则表达式中捕获命名子串,即所谓的捕获组。named capture groups 的写法为:(?<name>)
const pattern = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/ const match = pattern.exec('2018-04-30') console.log(match.groups.year) // 2018 console.log(match.groups.month) // 04 console.log(match.groups.day) // 30
支持 lookbehind 和 negative lookbehind 断言
lookbehind 断言用于查找后面紧跟着满足某种条件的字符串,并返回该字符串之前的内容。ES9 中新增了 lookbehind 和 negative lookbehind 断言。分别使用(?<=)和(?<!)语法定义。
const pattern = /(?<=\$\$)\d+/ pattern.exec('lorem ipsum $$100 dolor sit amet') // 返回 [ '100', index: 12, input: 'lorem ipsum $$100 dolor sit amet' ]
在上述例子中,pattern 正则表达式使用了 lookbehind 断言,即查找在 $$ 后面的数字。
总结
以上就是 ES9 中 JSON 和正则表达式的新特性。其中,JSON 的更新主要在规范化输出的语法上做了优化,而正则表达式则新增了一些实用功能。掌握这些新特性,能够帮助开发人员更加便捷地使用 JSON 和正则表达式,并提升开发效率。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64f02f86f6b2d6eab3a21139