Существует три типа пяти методов преобразования данных в числа в JS, в том числе:
•Принуждение: таким образом базовые типы данных JS преобразуются в соответствующие типы (Number(v))
• Собственные функции, эти две функции дают разные результаты (parseInt(v,radix), parseFloat(v))
• Неявное преобразование: JS преобразует переменную в соответствующий тип (битовое вычисление, математическое вычисление) во время выполнения.
Преобразованные исходные значения также можно просто разделить на три категории: объекты, специальные значения и строки.
К специальным значениям в JS относятся следующие.
• неопределенный, неопределенный, когда переменная объявлена, но ей не присвоено значение, или значение атрибута, которого нет в объекте, является этим.
• NaN/Бесконечность, это два упрямых «числа» (typeof == число), которые представляют собой нечисла и бесконечные числа соответственно. Это кажется бесполезным. Если преобразование в число не удалось, возвращаемое значение в основном будет NaN.
•null, используется как объект с нулевым значением (typeof == object).
• true/false, логическое значение, представляет истину или ложь, что эквивалентно 1/0.
Для строк его также можно подразделить в зависимости от содержимого. По числовым выражениям JS их можно разделить на легальные и нелегальные. Существует несколько различных способов классификации юридических чисел:
•Знак: положительный знак, отрицательный знак, без знака.
• Основание: восьмеричное, десятичное, шестнадцатеричное.
• Научное обозначение
• Десятичные и целые числа и сокращения для десятичных дробей.
На основе приведенной выше классификации я создал демо-версию для проверки результатов различных методов и числовых преобразований. На скриншоте ниже — конвертация под хром.
Судя по результатам, только битовые вычисления могут преобразовать любое значение в конечное число (isFinite). Результаты математических вычислений и принудительного преобразования одинаковы.
Преобразование специальных значений связано с исходным значением и методом преобразования. Все преобразования parseInt/parseFloat завершаются неудачно и возвращают NaN.
•NaN/неопределенное преобразуется в NaN другими методами;
• Infinity преобразуется в NaN с помощью parseInt, а остальные методы не меняют его значение;
• null/false/true не могут быть преобразованы с помощью parseInt/parseFloat и возвращают NaN.
Анализ преобразования строк в основном зависит от метода преобразования, но все методы не поддерживают числа, представленные восьмеричным числом, а обрабатываются как соответствующие десятичные числа.
• Логические вычисления преобразуют допустимые выражения, за исключением отрицательных шестнадцатеричных чисел, и отбрасывают десятичную часть. Недопустимые выражения возвращают ноль.
• Математическое вычисление/число аналогично логическому вычислению, но не округляет десятичные дроби; недопустимые выражения, кроме пустых строк, возвращают NaN.
•parseInt также сохраняет только целочисленную часть; но для недопустимых выражений он принимает допустимую целочисленную часть (десятиричную, шестнадцатеричную, исключая экспоненциальную запись) перед строкой и преобразует ее, в противном случае возвращает NaN.
•parseFloat аналогичен parseInt, за исключением того, что он может распознавать и сохранять десятичную часть и не поддерживает шестнадцатеричные числа.