Існує щонайменше 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
The ~~x результатах версії в ряді в «більш» випадках, коли інші часто призводять undefined, але він не для неприпустимого введення (наприклад , він повернеться , 0якщо рядок містить не число символів після того, як дійсне числа).
Переповнення
Зверніть увагу: може виникати переповнення цілого чи / або бітового скорочення ~~, але не з іншими перетвореннями. Хоча введення таких великих значень незвично, вам потрібно знати про це. Приклад оновлено, щоб включити набагато більші значення.
Деякі тести Perf вказують, що стандарт parseIntі parseFloatфункції - це фактично найшвидші варіанти, імовірно, оптимізовані браузерами, але все залежить від вашої вимоги, оскільки всі параметри досить швидкі : http://jsperf.com/best-of-string-to -число перетворення / 37
Все це залежить від того, як налаштовані тести perf, оскільки деякі показують parseInt / parseFloat набагато повільніше.
Моя теорія:
- Брехня
- Чортові лінії
- Статистика
- Результати JSPerf :)