+ = работает но ++ - PullRequest
       5

+ = работает но ++

1 голос
/ 13 августа 2011

В моем коде Javascript + = увеличивает число, а ++ - нет.Может ли кто-нибудь объяснить, почему?

Не увеличивает

words[splitted[i]] = ( typeof words[splitted[i]] != 'undefined' ) 
                       ? words[splitted[i]]++ 
                       : 1

Увеличивает

words[splitted[i]] = ( typeof words[splitted[i]] != 'undefined' ) 
                       ? words[splitted[i]] += 1 
                       : 1

Пример кода здесь

Ответы [ 3 ]

4 голосов
/ 13 августа 2011

Попробуйте переместить ++ в левую сторону.

var number = 1;
number = ++number;
>>> 2

Причина, по которой положение ++ имеет значение, заключается в том, что с правой стороны вы выполняете задание,затем приращение правого значения.Когда оператор находится слева, вы делаете приращение, а затем присваивание.

3 голосов
/ 13 августа 2011

Ваш код в более простой форме потенциально может привести к коду этой формы, когда определено words[splitted[i]]:

x = x++;

x++ возвращает значение x, а , затем увеличивает его, а затем устанавливает возвращаемое значение на x. Это контрастирует с

x = ++x;

где x сначала увеличивается, а затем оценивается.

Чтобы увидеть, как это работает, посмотрите на следующий код:

x = 1;
y = 1;
z = 1;
x = x++;
y = ++y;
z = z += 1;
alert(x); // 1
alert(y); // 2
alert(z); // 2

В любом случае, я думаю, что вы действительно хотите сделать что-то вроде этого:

(typeof words[splitted[i]] !== 'undefined') ? 
    words[splitted[i]]++ : 
    words[splitted[i]] = 1;

Это больше строк, но может быть более читабельным:

if (typeof words[splitted[i]] !== 'undefined') {
  words[splitted[i]] = 0
}
words[splitted[i]]++;
1 голос
/ 13 августа 2011

http://www.w3schools.com/js/js_operators.asp, - проверьте секцию оператора ++

x=++y -> x=6, y=6
x=y++ -> x=5, y=6
...