#javascript #specifications
#javascript #технические характеристики
Вопрос:
Я использую версию Chromium 53.0.2785.143, созданную на Ubuntu, работающую на Ubuntu 16.04 (64-разрядная версия)
В соответствии со спецификацией языка ECMAScript® оператор приращения префикса вычисляется следующим образом:
Имея это в виду, я не могу объяснить этот результат:
'1';
> Uncaught ReferenceError: Invalid left-hand side expression in prefix operation
когда следующий код работает как шарм:
var x = '1';
x;
> 2
Насколько я понимаю, в обоих случаях первые 3 маркера второго шага являются истинными, тогда как для '1'
случая четвертый маркер также является истинным (но почему?), А для x
случая он равен false, не вызывая ошибок. Я прав?
PS: Firefox выдает a SyntaxError: invalid increment operand
вместо a ReferenceError
Комментарии:
1. Кстати, вы получите ту же ошибку, если выполните 1
2.
PutValue('1', 2)
выдает ошибку, поскольку она не может быть присвоена строковому литералу. Вам нужна переменная или какой-либо другой видReference
.
Ответ №1:
Проблема в том, что ваш
оператор неявно включает присваивание, и вы не можете присвоить новое значение строковой константе. Обратите внимание, что
2;
также ошибочно по той же причине.
Комментарии:
1. … что предположительно происходит в
5. Call PutValue(expr, newValue)
?2. О .. я это пропустил. Спасибо за ответ!
Ответ №2:
В моем понимании,
похоже на = 1
.
Таким образом, он будет работать x
, поскольку он будет вычислен в x =1
or x=x 1
, но '1'
является строковым литералом и не имеет значения для присвоения левой стороны, следовательно, он завершается неудачей
Комментарии:
1. Вы даже можете буквально сделать
'1' = Number('1') 1
и получите ту же ошибку2. Потому что значение левой стороны недопустимо. вы не можете иметь
'1'
в качестве имени переменной3. О .. я это пропустил. Спасибо за ответ!