#javascript
#javascript
Вопрос:
var x = null;
x
генерирует ReferenceError
, но когда я делаю то же самое, используя оператор постфиксного инкремента x
, он работает просто отлично.
Комментарии:
1. почему вы хотите увеличить значение null??? в любом случае
2. Не работает в моем браузере Chrome(14.0.835).
3. В Chrome оба выдают
ReferenceError
4. Почему вы хотите увеличить значение NULL ??? это мой вопрос!!!
5. я знаю, что ( X) сделает это, но почему не x = 0 ; ??? это чище и проще
Ответ №1:
Оператор LeftHandSideExpression
for
не должен быть числом. Например
1 ;
завершится ошибкой с той же ошибкой (недопустимый операнд приращения). Вы можете применять операторы pre- и postincrement только к переменным / идентификаторам / выражениям.
Поскольку
знак преобразует null value
в число (0), вы получили тот же результат.
Примеры:
var foo = null,
bar = 5;
foo ; // 0
0 ; // invalid increment operand
null ; // invalid increment operand
( bar) // invalid increment operand
foo 2; // 2
Комментарии:
1. Пожалуйста, проверьте обновленный вопрос. Я удалил круглые скобки, и оператор постфиксного инкремента работает во всех браузерах, в то время как префиксный инкремент не работает.
Ответ №2:
x разбивается на два этапа:
- x инициализирует x равным 0, поэтому оно больше не равно null .
- затем x увеличивает x, что работает, поскольку x больше не равно null .
x также разбивается на два этапа, но в определенном порядке:
- x вычисляется первым, что вызывает исключение, поскольку x равно нулю.
- затем будет вычислен x, за исключением того, что у вас уже было исключение.
Я думаю, вы предполагали, что x будет анализироваться как ( x), но на самом деле он анализируется как ( x) . Это неоднозначный синтаксис, разработчикам языка пришлось выбрать один из двух способов его анализа, и, с вашей точки зрения, они выбрали «другой».
Честно говоря, в любом случае нет абсолютно никакой ценности в форматировании вашего кода таким образом — все, что вы получаете, это сомнительный код, который предназначен для запутывания людей.
Комментарии:
1. x = 1, когда x равно нулю. он не создает никаких исключений.
2. @Narenda, я думаю, вы предполагаете, что x является целым числом. Целые числа никогда не могут быть нулевыми (код «int x;» автоматически инициализирует x как 0). В этом случае мы имеем дело с пользовательским ссылочным типом (а не встроенным типом значения), который реализует оператор увеличения. Переменным таких типов может быть присвоено значение null, и x в таком случае выдаст исключение.
3. Я просто объявляю
var x = null;
, а затем делаюx
, он возвращается1
.
Ответ №3:
если вы использовали x= 0; x будет инициализирован целочисленным типом, который будет принимать оператор x, в то время как ( x) похож на ( null), поэтому лучше попробуйте изменить на X = 0 ;