Преобразование типа в строку в javaScript явно игнорирует let как ключевое слово.

String(let) выдает ошибку ReferenceError: let не определена

Принимая во внимание, что String(var) выдает ошибку SyntaxError: Unexpected token 'var'

Это предполагаемое поведение?

2
Abdulkalam R 6 Апр 2021 в 03:42

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 (и поэтому нет никакой обратной совместимости, о которой следует беспокоиться).

Как отмечается в комментарии, это не строковая интерполяция. Это просто синтаксический анализатор, определяющий допустимые имена переменных / идентификаторов.

3
CertainPerformance 6 Апр 2021 в 01:01