+ унарный оператор в javascript

Я уже прочитал эту тему: Объясните унарный оператор +var и -var в JavaScript

но я до сих пор не могу понять этот простой код:

var a = 3;
console.log(-a);  // -3
console.log(+a);  //  3
a = -a;
console.log(a);  // -3
console.log(+a);  // -3

"Унарный оператор отрицания предшествует своему операнду и инвертирует его".

"Унарный оператор "плюс" предшествует своему операнду и возвращает его операнд, но пытается преобразовать его в число, если это еще не сделано".

но я до сих пор не могу понять, почему console.log(+a) возвращает 3 в первый раз.


person seb_kaine    schedule 08.09.2015    source источник
comment
ваш третий console.log выводит 3, а не -3.   -  person xlecoustillier    schedule 08.09.2015
comment
@X.L.Ant вы правы, я отредактировал свой пост. Спасибо за ваш отзыв.   -  person seb_kaine    schedule 08.09.2015


Ответы (1)


но я до сих пор не могу понять, почему console.log(+a) возвращает 3 в первый раз.

В этот момент значение a равно 3.

Предыдущая строка, -a, принимает значение a, инвертирует его и передает в console.log. Он не присваивает измененное значение обратно a.

person Quentin    schedule 08.09.2015
comment
Спасибо, Квентин, так что ++ и + не ведут себя одинаково в js. Потому что, если я сделаю var a = 0; console.log(++а); // 1 console.log(--a); // 0. так что в этом случае наличие оператора перед операндом изменяет переменную. Другими словами, когда оператор ++ предшествует изменению переменной, но когда оператор + предшествует ему, он не изменяет ее? Js хитрый... :) - person seb_kaine; 08.09.2015
comment
++a это сокращение от a = a+1 - person Barmar; 08.09.2015
comment
Ну да. Разные операторы делают разные вещи. - person Quentin; 08.09.2015
comment
+a и ++a совершенно разные. - person Barmar; 08.09.2015
comment
спасибо, ребята, за ваши ответы. и простите за нубский вопрос. - person seb_kaine; 08.09.2015