Каков идиоматический способ выполнения "целочисленного" преобразования / typecast в javascript? - PullRequest
6 голосов
/ 21 июня 2010

Другой вопрос задан о значении фрагмента кода a >>> 0 в Javascript.Оказывается, это умный способ убедиться, что переменная представляет собой 32-разрядное целое число без знака.

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

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

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

1 Ответ

4 голосов
/ 21 июня 2010

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

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

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