为什么let在javaScript中类型转换为字符串时不被识别为关键字?

Why is let not recognised as a keyword in type conversion to string in javaScript?

javaScript 中的字符串类型转换显然忽略了 let 作为关键字。

String(let) 抛出错误 ReferenceError: let is not defined

然而,String(var) 抛出错误 SyntaxError: Unexpected token 'var'

这是预期的行为吗?

“保留关键字”不能用作标识符(变量名)。 var is a reserved keyword.

let 不是保留关键字,因为这会破坏向后兼容性:在没有考虑 ES6 的情况下编写的古代脚本碰巧使用 let 作为变量名会失败(浏览器会尝试 不破坏向后兼容性

  • 查看该问题以获得详细解释)。

因此使用 String(var) 会引发 语法 错误,但在语法上允许使用 let - 直到您尝试引用它(此时会抛出错误,因为不存在名为 let 的变量。

出于完全相同的原因,可以定义名为 let 的变量,但不能定义名为 var:

的变量

var let = 123;
console.log(String(let));

var var = 123;
console.log(String(var));

此外,let不能在严格模式下声明为标识符:

'use strict';
var let = 123;
console.log(String(let));

这是可能的,因为如果使用严格模式,运行 的代码保证是在 ES5 之后编写的(因此无需担心任何向后兼容性)。

作为注释,这是 。这只是识别有效 variable/identifier 名称的解析器。