迹忆客 专注技术分享

当前位置:主页 > 学无止境 >

ES2015 中有效的 JavaScript 变量名

作者:迹忆客 最近更新:2023/01/09 浏览次数:

ES2015 更新了标识符的语法。 这会影响很多事情,但最重要的是,标识符可以用作变量名称,并且标识符名称是有效的不带引号的属性名称。 这篇文章描述了与旧 ES5 行为相比的可观察到的变化。

保留字

ES2015 在模块上下文中保留了 await 关键字以供将来使用。

// Valid in ES5, but invalid in an ES2015 module context:
var await;

转义序列

ES5 标识符中唯一允许的转义序列类型是 \uXXXX 形式的所谓 Unicode 转义。

在 ES2015 中,新的 Unicode 代码点转义语法也被接受。

// Valid in ES5 and ES2015:
var a;

// Valid in ES5 and ES2015:
var \u0061;

// Invalid in ES5, but valid in ES2015:
var \u{61};

可接受的 Unicode 符号

在 ES2015 中,标识符必须以 $_ 或任何具有 Unicode 派生核心属性 ID_Start 的符号开头。

标识符的其余部分可以包含 $_U+200C 零宽度非连接符、U+200D 零宽度连接符或具有 Unicode 派生核心属性 ID_Continue 的任何符号。

这不同于基于 Unicode 类别的 ES5 标识符名称的定义。 因此,一些在 ES5 标识符中不允许使用的 Unicode 符号现在可以在 ES2015 标识符中使用,反之亦然。

// Valid in ES5 & Unicode v5.1.0+, but invalid in ES2015:
var ⸯ; // U+2E2F VERTICAL TILDE
var \u2E2F; // U+2E2F VERTICAL TILDE

在 ES5 标识符中,星体符号是不允许的,即使表示为转义代理对 (\uXXXX\uXXXX)。

在 ES2015 中,当表示为原始符号或使用单个 \u{...} 转义序列时,标识符中的 astral ID_Start 或 ID_Continue 符号被接受。

// Invalid in ES5, but valid in ES2015:
var 𐊧; // U+102A7 CARIAN LETTER A2
var \u{102A7}; // U+102A7 CARIAN LETTER A2

// Invalid in ES5 and ES2015:
var \uD800\uDEA7; // U+102A7 represented as a surrogate pair

ES5 规范允许实现将其标识符支持建立在与 Unicode v3.0.0 一样古老的 Unicode 版本上。 ES2015 将 Unicode v5.1.0 列为兼容性所需的最低 Unicode 版本。

// Valid in ES5, but only works in some ES5 engines (i.e. those with Unicode
// data from v3.2.0 or more recent):
var Ƞ; // U+0220 LATIN CAPITAL LETTER N WITH LONG RIGHT LEG
var \u0220;
// On the other hand, it is guaranteed to work in all ES2015-compliant engines.

// Valid in ES5, but only works in some ES5 engines (i.e. those with Unicode
// data from v4.0.0 or more recent):
var ȡ; // U+0221 LATIN SMALL LETTER D WITH CURL
var \u0221;
// On the other hand, it is guaranteed to work in all ES2015-compliant engines.

// Valid in ES5, but only works in some ES5 engines (i.e. those with Unicode
// data from v5.1.0 or more recent):
var _҇; // U+0487 COMBINING CYRILLIC POKRYTIE
var _\u0487;
// On the other hand, it is guaranteed to work in all ES2015-compliant engines.

不再有非标准行为

在某些时候,如果至少有一个字符被转义,所有主要的 JavaScript 引擎都支持保留字作为标识符。 例如,var var; 不会工作,但是例如 var v\u0061r; 会——尽管这从来都不是规范的一部分。

// Invalid in ES5 and ES2015:
var var;

// Invalid in ES5 and ES2015, but supported in old ES5 engines:
var v\u0061r;

ES2015 明确地使这种行为不合规,并且实现正在放弃它。 Firefox/Spidermonkey、Safari/JavaScriptCore 和 IE/Chakra 已经放弃了这种行为; Chrome/Opera/V8 也计划放弃。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便