2010-01-09 2 views
2

Итак, я взглянул на код, управляющий счетчиком на странице SO-рекламы. Затем я увидел линию, где это произошло i-->. Что это делает?Что делает i -> opeator в JavaScript?

Вот полный код:

$(function(){ 

    var visitors = 5373891; 
    var updateVisitors = function() 
    { 
      visitors++; 

      var vs = visitors.toString(), 
       i = Math.floor(vs.length/3), 
       l = vs.length % 3; 
      while (i-->0) if (!(l==0&&i==0))   // <-------- Here it is!!! 
       vs = vs.slice(0,i*3+l) 
        + ',' 
        + vs.slice(i*3+l); 
      $('#devCount').text(vs); 
      setTimeout(updateVisitors, Math.random()*2000); 
    }; 

    setTimeout(updateVisitors, Math.random()*2000); 

}); 
+2

Это, очевидно, скопирована с HTTP: //stackoverflow.com/questions/1642028/what-is-the-name-of-this-operator –

+0

Этот вопрос касается Javascript. Вы ссылаетесь на C/C++. Это правда, что они похожи и, возможно, даже скопированы, но я думаю, что это достаточно справедливый вариант, поскольку он спрашивает о другом языке. –

+0

@Rob Levine: Отлично! Я отправлю аналогичный вопрос для каждого языка программирования, который поддерживает как оператор пост декремента, так и оператор, превышающий оператор: -P (и для каждого языка, который поддерживает предварительный декремент и меньше операторов xD) –

ответ

13

i-->0 такая же, как i-- > 0, так что выражение сравнения, если оцениваемое значение i-- больше 0.

+2

Ничего себе, бегаю все это вместе, даже немного смутив меня. Хороший глаз, Гумбо. – Sampson

+0

Это кажется действительно грязным! Спасибо, что объяснили это. –

+2

Просто, чтобы уточнить, означает, что сравнение «i> 0» происходит * до того, как * i уменьшится. –

6

это не оператор. Смотрите эту ссылку:

What is the "-->" operator in C++?

var i = 10; 

while (i-- > 0) 
{ 
    alert('i = ' + i); 
} 

Выход:

i = 9 
i = 8 
i = 7 
i = 6 
i = 5 
i = 4 
i = 3 
i = 2 
i = 1 
i = 0 
+1

Вы смешивали C# с вашей Java? ;-) –

+1

Сначала я подумал, что неправильно написал код javascript :) Вы имеете в виду аватар. Да, я перевел C# с Java, и я люблю кофе :) – JCasso

0

Мысль точно такой же поток, который JCasso подумал. What is the "-->" operator in C++?

Я думаю, что этот стиль кода связан с ранними днями программирования, когда терминалы имели ограниченную дисплейную недвижимость.

+0

Нет, это довольно новая тенденция. Это синтаксический сахар, который читает «пока я приближаюсь к нулю». Некоторым это нравится. Некоторые просто путаются. Это зависит от погоды, которую вы привыкли видеть или нет. Kinda, как регулярные выражения: когда вы впервые видите это, вы хотите сильно рвать на клавиатуру, тогда вы полюбите ее. – slebetman

+0

Ahh ok, вы узнаете что-то новое каждый день. Я не большой поклонник этого, я должен признать, что я ... 0 читает лучше для меня. – ncremins

+1

Я ценю оператор '->', но никакое количество лет использования регулярных выражений не прекратило меня рвать :-) – bobince

1

Другие ответы объяснили, что это два оператора. Я просто добавлю, что в этом примере это не нужно. Если вы отсчитывать от положительного целого числа к нулю, вы можете пропустить большую, чем ноль тест и ваш код будет короче, и, я думаю, яснее:

var i = 10; 
while (i--) { 
    // Do stuff; 
}