Преобразование типа в строку в javaScript явно игнорирует let как ключевое слово.
String(let)
выдает ошибку ReferenceError: let не определена
Принимая во внимание, что String(var)
выдает ошибку SyntaxError: Unexpected token 'var'
Это предполагаемое поведение?
1 ответ
«Зарезервированные ключевые слова» нельзя использовать в качестве идентификаторов (имен переменных). 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 (и поэтому нет никакой обратной совместимости, о которой следует беспокоиться).
Как отмечается в комментарии, это не строковая интерполяция. Это просто синтаксический анализатор, определяющий допустимые имена переменных / идентификаторов.
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.