Любой номер, это номер. Строка выглядит как число, это число. Все остальное - NaN.
'a' => NaN
'1' => 1
1 => 1
javascript
beatak
источник
источник
'1a'
строкой? С' 1'
одним? Другими словами, почему наиболее распространенные методы для этого (Number(x)
иparseInt(x, 10)
) вам не подходят?Ответы:
Насколько я знаю, есть 4 способа сделать это.
Судя по тому быстрому тесту, который я сделал, это действительно зависит от браузеров.
http://jsperf.com/best-of-string-to-number-conversion/2
Implicit
отмечен как самый быстрый в 3 браузерах, но это затрудняет чтение кода… Так что выбирайте все, что вам нравится!источник
1*
для преобразования даты в число, что аналогично приведенному+
выше. т.е.1*new Date()
а не+new Date()
. Может, читабельнее?1*
это предпочтительнее, потому что он менее подвержен ошибкам. Нежелательная висящая ранее переменная+1
не является ошибкой синтаксического анализа. Это уловка, аналогичная использованиюif (MYCONSTANT == myvar)
вC
.Для этого есть как минимум 5 способов:
Если вы хотите преобразовать только в целые числа, другой быстрый (и короткий) способ - это двойное побитовое не (т.е. использование двух символов тильды):
например
~~x;
Ссылка: http://james.padolsey.com/cool-stuff/double-bitwise-not/
Все 5 известных мне способов преобразования строки в число имеют свои различия (есть и другие побитовые операторы, которые работают, но все они дают тот же результат, что и
~~
). Этот JSFiddle показывает разные результаты, которые вы можете ожидать в консоли отладки: http://jsfiddle.net/TrueBlueAussie/j7x0q0e3/22/Консоль отладки:
В
~~x
результатах версии в ряде в «более» случаях, когда другие часто приводятundefined
, но он не для недопустимого ввода (например , он вернется ,0
если строка содержит не число символов после того, как действительное числа).перелив
Обратите внимание: целочисленное переполнение и / или усечение битов может происходить с
~~
другими преобразованиями, но не с другими. Хотя вводить такие большие значения необычно, вы должны знать об этом. Пример обновлен, чтобы включить гораздо большие значения.Некоторые тесты Perf показывают, что стандарт
parseInt
иparseFloat
функции на самом деле являются самыми быстрыми вариантами, предположительно сильно оптимизированными браузерами, но все зависит от ваших требований, поскольку все варианты достаточно быстрые : http://jsperf.com/best-of-string-to -количество-преобразования / 37Все зависит от того, как настроены тесты производительности, поскольку некоторые показывают, что parseInt / parseFloat намного медленнее.
Моя теория:
источник
~~4294967296
возвращает0
.Префикс строки с
+
оператором.источник
Быстрый способ преобразовать строки в целое число - использовать побитовое или, например:
Хотя это зависит от того, как он реализован, теоретически он должен быть относительно быстрым (по крайней мере, таким же быстрым, как
+x
), поскольку сначала он будетx
приводить к числу, а затем выполнять очень эффективный или.источник
Вот простой способ сделать это: var num = Number (str); в этом примере str - это переменная, содержащая строку. Вы можете протестировать и посмотреть, как это работает, откройте: Инструменты разработчика Google Chrome , затем перейдите в консоль и вставьте следующий код. прочтите комментарии, чтобы лучше понять, как происходит преобразование.
источник
Я считаю, что
num * 1
это просто, понятно и работает для целых чисел и чисел с плавающей запятой ...источник
Вероятно, это не так быстро, но есть дополнительное преимущество, заключающееся в том, что ваш номер имеет хотя бы определенное значение (например, 0) или самое большее определенное значение:
Если вам нужно обеспечить минимальное значение, обычно вы делаете
Math.max(..., 0)
избавляет от написания двух утверждений.источник
Math.abs(input)
? Он также преобразует строки в положительные числа и сохраняет несколько дополнительных символов.input
не может быть преобразовано в число, вы получитеNaN
Вы можете попробовать использовать UnitOf , библиотеку измерений и преобразования типов данных, которую мы только что официально выпустили! UnitOf очень быстрый, маленький по размеру и эффективный при преобразовании любого типа данных без каких-либо ошибок или значений null / undefined. Значения по умолчанию, которые вы определяете, или значения по умолчанию UnitOf возвращаются, если преобразование не выполнено.
источник
Самый быстрый способ - использовать -0:
источник