Любое число, это число. Строка выглядит как число, это число. Все остальное, это NaN.
'a' => NaN
'1' => 1
1 => 1
Любое число, это число. Строка выглядит как число, это число. Все остальное, это NaN.
'a' => NaN
'1' => 1
1 => 1
Есть 4 способа сделать это, насколько я знаю.
Number(x);
parseInt(x, 10);
parseFloat(x);
+x;
В результате этого быстрого теста, который я сделал, это действительно зависит от браузеров.
http://jsperf.com/best-of-string-to-number-conversion/2
Implicit
отмечен самым быстрым в 3 браузерах, но он делает код трудным для чтения... Поэтому выбирайте все, что вам нравится!
Если вы хотите преобразовать только в целые числа, другой быстрый (и короткий) способ - это double-bitwise not (т.е. использование двух тильд-символов):
например.
~~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-number-conversion/37
Все зависит от того, как перфорированные тесты настроены так, как некоторые показывают, что parseInt/parseFloat будет намного медленнее.
Быстрый способ преобразования строк в целое число состоит в использовании поразрядного или, например:
x | 0
В то время как это зависит от того, как оно реализовано, теоретически оно должно быть относительно быстрым (по крайней мере, так быстро, как +x
), поскольку оно сначала будет отличать x
от числа, а затем выполнить очень эффективное или.
Вот простой способ сделать это: var num = Number (str); в этом примере str - это переменная, содержащая строку. Вы можете протестировать и посмотреть, как он работает: инструменты разработчика Chrome Chrome, затем перейдите в консоль и вставьте следующий код. прочитайте комментарии, чтобы лучше понять, как делается конверсия.
// 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)
избавляет вас от написания двух утверждений.
Префикс строки с помощью оператора +
.
console.log(+'a') // NaN
console.log(+'1') // 1
console.log(+1) // 1