8 ответов:
есть 4 способа сделать это, насколько я знаю.
Number(x); parseInt(x, 10); parseFloat(x); +x;этот быстрый тест я сделал, это на самом деле зависит от браузеров.
http://jsperf.com/best-of-string-to-number-conversion/2
Implicitотмечен самый быстрый на 3 браузерах, но это делает код трудно читать... так что выбирайте, что вам это нравится!
есть по крайней мере 5 способов сделать это:
если вы хотите конвертировать только в целые числа, другой быстрый (и короткий) способ -двойное побитовое не (т. е. с использованием двух символов Тильды):
например
~~x;ссылка:http://james.padolsey.com/cool-stuff/double-bitwise-not/
5 распространенных способов, которые я знаю до сих пор, чтобы преобразовать строку в число все имеют свои различия (есть больше побитовых операторов, которые работают, но все они дают тот же результат, что и
~~). Этот JSFiddle показывает различные результаты, которые можно ожидать в консоли отладки:http://jsfiddle.net/TrueBlueAussie/j7x0q0e3/22/var values = ["123", undefined, "not a number", "123.45", "1234 error", "2147483648", "4999999999" ]; for (var i = 0; i < values.length; i++){ var x = values[i]; console.log(x); console.log(" Number(x) = " + Number(x)); console.log(" parseInt(x, 10) = " + parseInt(x, 10)); console.log(" parseFloat(x) = " + parseFloat(x)); console.log(" +x = " + +x); console.log(" ~~x = " + ~~x); }консоль отладки:
123 Number(x) = 123 parseInt(x, 10) = 123 parseFloat(x) = 123 +x = 123 ~~x = 123 undefined Number(x) = NaN parseInt(x, 10) = NaN parseFloat(x) = NaN +x = NaN ~~x = 0 null Number(x) = 0 parseInt(x, 10) = NaN parseFloat(x) = NaN +x = 0 ~~x = 0 "not a number" Number(x) = NaN parseInt(x, 10) = NaN parseFloat(x) = NaN +x = NaN ~~x = 0 123.45 Number(x) = 123.45 parseInt(x, 10) = 123 parseFloat(x) = 123.45 +x = 123.45 ~~x = 123 1234 error Number(x) = NaN parseInt(x, 10) = 1234 parseFloat(x) = 1234 +x = NaN ~~x = 0 2147483648 Number(x) = 2147483648 parseInt(x, 10) = 2147483648 parseFloat(x) = 2147483648 +x = 2147483648 ~~x = -2147483648 4999999999 Number(x) = 4999999999 parseInt(x, 10) = 4999999999 parseFloat(x) = 4999999999 +x = 4999999999 ~~x = 705032703The
~~xверсия приводит к числу в" более " случаях, где другие часто приводят кundefined, но он не работает для недопустимого ввода (например, он вернет0если строка содержит количество персонажи после действительное число).переполнения
обратите внимание: переполнение целых чисел и / или усечение битов может произойти с
~~, но не другие преобразования. Хотя это необычно, чтобы вводить такие большие значения, вы должны знать об этом. Пример обновлен, чтобы включить гораздо бОльшие значения.некоторые Perf тесты показывают, что стандарт
parseIntиparseFloatфункции на самом деле самые быстрые варианты, предположительно сильно оптимизированные мимо браузеры, но все зависит от вашего требования как все опции достаточно быстро: http://jsperf.com/best-of-string-to-number-conversion/37все это зависит от того, как тесты perf настроены, поскольку некоторые показывают, что parseInt/parseFloat намного медленнее.
моя теория:
- врет
- штопать строки
- статистика
- результаты JSPerf:)
быстрый способ преобразования строк в целое число - использовать побитовое или, например:
x | 0хотя это зависит от того, как он реализован, теоретически он должен быть относительно быстрым (по крайней мере, так же быстро, как
+x) так как это будет первый бросокxк числу, а затем выполнить очень эффективный или.
вот простой способ сделать это: var num = Number (str); str - это переменная, содержащая строку. Вы можете проверить и посмотреть, как это работает open:Google chrome developer tools, тогда идите в консоль и вставьте следующий код. прочитайте комментарии, чтобы лучше понять, как выполняется преобразование.
// Here Im creating my variable as a string var str = "258"; // here im printing the string variable: str console.log ( str ); // here Im using typeof , this tells me that the variable str is the type: string console.log ("The variable str is type: " + typeof str); // here is where the conversion happens // Number will take the string in the parentesis and transform it to a variable num as type: number var num = Number(str); console.log ("The variable num is type: " + typeof num);
Это, вероятно, не так быстро, но имеет дополнительное преимущество, убедившись, что ваш номер по крайней мере определенное значение (например, 0), или самое большее определенное значение:
Math.max(input, 0);Если вам нужно обеспечить минимальное значение, обычно вы могли бы сделать
var number = Number(input); if (number < 0) number = 0;
Math.max(..., 0)избавляет от написания двух заявлений.
вы можете попробовать использовать UnitOf, библиотека преобразования типа измерения и данных, которую мы только что официально выпустили! UnitOf является супер быстрым, небольшим по размеру и эффективным при преобразовании любого типа данных, никогда не бросая ошибку или null/undefined. Значения по умолчанию, которые вы определяете, или значения по умолчанию UnitOf возвращаются при неудачном преобразовании.
//One liner examples UnitOf.DataType("12.5").toFloat(); //12.5 of type Float is returned. 0 would be returned if conversion failed. UnitOf.DataType("Not A Num").toInt(10); //10 of type Int is returned as the conversion failed. //Or as a variable var unit = UnitOf.DataType("12.5"); unit.toInt(5); //12.5 of type Float is returned. 5 would be returned if the conversion failed. unit.toFloat(8); // 12 of type Int is returned. 8 would be returned if the conversion failed.
Comments