Поясните код

 
0
 
JavaScript
ava
Gold Dragon | 23.09.2011, 09:11
есть вот такой код

$('a.item').bind('mouseout', function( event ) {
lfnid = 1 * $(this).attr('var');
lfactive = false;
return false;
});

Зачем идёт умножение на единицу? В var хранятся цифры. Я так понимаю это своеобразное преобразование в цифры?
Kommentare (16)
ava
ayax2005 | 23.09.2011, 08:19 #
Правильно понимаете.
ava
Gold Dragon | 23.09.2011, 08:25 #
ну тогда вопрос закрыт :)

später ergänzt:
а другого способа нет? или этот самый оптимальный?
ava
ayax2005 | 23.09.2011, 10:32 #
это вообще не способ, а ###кодинг. Нужно использовать функци parseInt()
ava
Gold Dragon | 23.09.2011, 10:54 #
т.е. так нужно?

lfnid = parseInt($(this).attr('var'), 10);


вот это уже лучше и понятнее smile спасибо..
ava
ayax2005 | 23.09.2011, 11:16 #
конечно, потому что в случае строкового значения может получиться довольно неприятная штука рпи умножении)
ava
SelenIT | 23.09.2011, 19:48 #
Цитата (ayax2005 @ 23.9.2011, 11:16 findReferencedText)
потому что в случае строкового значения может получиться довольно неприятная штука рпи умножении)

Пардон, а в чем именно разница? Если строка негодная, то, вроде, что так, что этак — в результате NaN. А с умножением писать меньше (а если я правильно понимаю спеку — то и считать машине тоже)...
ava
Amphiluke | 23.09.2011, 20:28 #
Цитата (SelenIT @ 23.9.2011, 23:48 findReferencedText)
А с умножением писать меньше

Есть и еще более краткое преобразование, чем умножение на 1 — использовать унарный плюс.

lfnid = +$(this).attr('var');
ava
Evghenusi | 24.09.2011, 00:32 #
http://codepad.org/QCZr7KaW
аааачуметь smile (решил проверить и ......)

später ergänzt:
я думал на такое только JS способен... smile
ava
Gold Dragon | 24.09.2011, 08:35 #
я сделал 0+... и вылетела ошибка
ava
Evghenusi | 24.09.2011, 19:55 #
Gold Dragon, посдрафляю
ava
SelenIT | 24.09.2011, 22:52 #
Прикола ради попробовал прогнать тест. В FF 6.0.2 (Win 7 Pro x64) все три варианта примерно одинаковы по скорости (parseInt чуть-чуть быстрее, но в пределах погрешности), в IE9 (там же) быстрее всех умножение на 1 (почти вдвое). Чуть позже проверю на др. браузерах smile
ava
Evghenusi | 25.09.2011, 20:41 #
Цитата (SelenIT @ 24.9.2011, 22:52 findReferencedText)
Прикола ради попробовал
вдруг заинтересует http://jsperf.com/parse. (поправьте если не правильно тестю)
ava
SelenIT | 26.09.2011, 10:40 #
Результаты на Win 7 32bit:

FF7b IE9 Opera 11.50 Chrome 14 Safari 5.0.4

parseInt 9,054,246 ±0.26% 6,658,738±0.84% 4,406,561±0.41% 40,855,888±0.97% 2,270,728±1.07%
fastest 41% slower 31% slower fastest
+ 7,039,097 ±3.71% 11,234,246±0.86% 6,386,476±0.37% 15,200,210±1.19% 2,156,533±0.45%
22% slower fastest fastest 63% slower
- 7,028,310 ±4.17% 9,896,399±0.56% 5,062,331±0.38% 14,691,198±2.03% 2,208,745±0.55%
22% slower 12% slower 21% slower 64% slower
1* 6,449,774 ±4.15% 11,150,280±0.71% 4,279,307±1.36% 14,249,240±0.94% 2,160,782±0.26%
29% slower fastest 33% slower 65% slower


Получается, parseInt мечется из крайности в крайность (от самого быстрого в FF и неправдоподобно быстрого в Хроме до самого медленного в IE и Опере), а унарный плюс прилично выглядит везде (если не первый, то хотя бы второй). Но разница в абсолютных цифрах между Хромом и Сафарями впечатляет...
ava
Gold Dragon | 26.09.2011, 10:42 #
и получается что 1* в среднем быстрее всего работает smile
ava
SelenIT | 26.09.2011, 10:49 #
Нет, в FF и Хроме - медленнее всего. Тут цифры в операциях в секунду (больше - лучше).

Но разница не такая чтобы очень smile. И еще parseInt и остальные делают слегка разные вещи - первая заведомо приводит к целому (если может), а остальные могут выдать и дробь...
ava
Evghenusi | 26.09.2011, 15:34 #
Цитата (SelenIT @ 26.9.2011, 10:49 findReferencedText)
а остальные могут выдать и дробь...

спасибо что сказали, я бы прошёл мимо и не проверил бы этот вариант.
Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
advanced
Absenden