Другой вопрос, который спрашивают о значении фрагмента кода a >>> 0
в JavaScript. Оказывается, что это - умный способ гарантировать, что переменная является неподписанным 32-разрядным целым числом.
Это круто, но мне не нравится он по двум причинам.
Это приводит меня спрашивать: Каков самый идиоматический способ преобразовать произвольное значение в "целое число" в JavaScript? Это должно работать на целые числа со знаком, не только неотрицательные числа. Случаи, где это повреждается вследствие того, что целые числа являются просто плаваниями, скрытыми в JavaScript, приемлемы, но должны быть подтверждены. Это не должно возвращаться undefined
или NaN
в любом случае (это не целые числа), но возврат 0
для нечисловых значений.
parseInt
- это «самый идиоматический» способ, поскольку он точно описывает то, что вы от него хотите. Недостатком parseInt
является то, что он возвращает NaN
, если вы вводите нечисловую строку.
Другой метод - это поразрядное ИЛИ на 0 ( | 0
), который также работает для отрицательных чисел. Более того, он возвращает 0
при использовании его в нечисловой строке. Другое преимущество состоит в том, что он немного быстрее, чем parseInt
при использовании его с действительными числами; он медленнее при подаче струн.
12,4 | 0
выходы 12
-12,4 | 0
выводит -12
«12,4» | 0
выводит 12
«не число» | 0
выходы 0