javaScript中对字符串的类型转换显然忽略了let作为关键字。
String(let)
抛出错误ReferenceError:let未定义
然而,String(var)
抛出错误SyntaxError:意外的令牌'var'
这是预定的行为吗?
"保留关键字";不能用作标识符(变量名(。var
是一个保留关键字。
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之后编写的(因此不需要担心任何向后兼容性(。
正如注释所指出的,这不是字符串插值。这只是识别有效变量/标识符名称的解析器。