2010-06-21 7 views
6

Another question спросил о значении кода фрагмента a >>> 0 в Javascript. Оказывается, это умный способ гарантировать, что переменная представляет собой 32-битное целое число без знака.Что такое идиоматический способ выполнения «целочисленного» преобразования/typecast в javascript?

Это довольно аккуратно, но мне это не нравится по двум причинам.

  • Цель выражения не ясна, по крайней мере, не для меня.
  • Это не работает для отрицательных чисел

Это заставляет меня спросить: Что является наиболее идиоматическим способом преобразования произвольного значения на «целое» в JavaScript? Он должен работать для целых целых чисел, а не только неотрицательных чисел. Случаи, когда это прерывается из-за того, что целые числа являются просто плавающими в маскировке в Javascript, являются приемлемыми, но должны быть подтверждены. Он не должен возвращать undefined или NaN в любом случае (это не целые числа), но возвращает 0 для нечисловых значений.

ответ

4

parseInt - «самый идиоматический» способ, так как он точно описывает, что вы хотите. Недостатком parseInt является то, что он возвращает NaN, если вы вводите нечисловую строку.

Другой метод - побитовое ORing на 0 (| 0), которое также работает для отрицательных чисел. Более того, он возвращает 0 при использовании его на нечисловой строке. Другим преимуществом является то, что он немного быстрее, чем parseInt при использовании его на реальных числах; он медленнее кормит его струнами.

  • 12.4 | 0 выходы 12
  • -12.4 | 0 выходы -12
  • "12.4" | 0 выходы 12
  • "not a number" | 0 выходы 0
+0

Это не делает именно то, что я хочу. 'parseInt (" not int, damnit ")' возвращает 'NaN'. – fmark

+0

@fmark: Скорректированный ответ. –

+0

Знак '| 0', который он упомянул, действительно работает очень хорошо: строки равны 0,' true' равно 1, '28.3' равно 28,' -28.3' -28, NaN (как, например, '(+" foo «) | 0') равно 0,' undefined' равно 0. Я что-то пропустил? – Amadan

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