Для этого есть как минимум 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 = 705032703
В ~~xрезультатах версии в ряде в «более» случаях, когда другие часто приводят undefined, но он не для недопустимого ввода (например , он вернется , 0если строка содержит не число символов после того, как действительное числа).
перелив
Обратите внимание: целочисленное переполнение и / или усечение битов может происходить с ~~другими преобразованиями, но не с другими. Хотя вводить такие большие значения необычно, вы должны знать об этом. Пример обновлен, чтобы включить гораздо большие значения.
Некоторые тесты Perf показывают, что стандарт parseIntи parseFloatфункции на самом деле являются самыми быстрыми вариантами, предположительно сильно оптимизированными браузерами, но все зависит от ваших требований, поскольку все варианты достаточно быстрые : http://jsperf.com/best-of-string-to -количество-преобразования / 37
Все зависит от того, как настроены тесты производительности, поскольку некоторые показывают, что parseInt / parseFloat намного медленнее.
Моя теория:
- Вранье
- Штрафные линии
- Статистика
- Результаты JSPerf :)