2015-03-30 3 views
1

блок кода 1:Вопрос оператора в JS

var a = (1 + - + + + - + 1); 
alert(a); //2 

Почему равно 2?

блок кода 2:

var a = (1+-+++-+1); 
alert(a); //ReferenceError: Invalid left-hand side expression in prefix operation 
+0

Каков ваш ожидаемый результат? – Sim1

ответ

3

При использовании пространства в вашем выражении она отбрасывания предыдущего оператора, поэтому код блока две ошибки и блок кода один в основном делает:

var a = (1 + 1);

0

Собственно, это всего лишь basic math. Он сгруппировался и оценил

1 + (- (+ (+ (+ (- (+ 1)))))) 

Он не отбрасывает предыдущих операторов. Он просто использует основной закон, который - умноженный на + is -. Например, следующий только группируясь как 1 - (+ 1), который 1 - 1 который 0

1 - + 1 // 0 

Теперь, когда вы не используете пространство, то Javascript интерпретирует его как операторы инкремента и декремента и, следовательно, ошибки.

0

Во-первых, другой ответ правилен в отношении «странного» поведения в первом случае. Причина, по которой вы получаете ReferenceError во втором случае без пробелов, состоит в том, что два из этих + s обрабатываются как команда приращения ++.

1+-+(+(+-1)) не даст вам ошибку

Смежные вопросы