Есть ли какие-либо побочные эффекты использования этого метода для преобразования строки в целое число

Есть ли побочные эффекты, если я преобразую строку в число, как показано ниже?

var numb=str*1;

Если я проверю с кодом ниже, он говорит, что это число..

var str="123";
str=str*1;
if(!isNaN(str))
{
  alert('Hello');   
}

Пожалуйста, дайте мне знать, если есть какие-либо проблемы с использованием этого метода.

1 ответ

Решение

Когда вы используете parseFloat, или же parseInt Преобразование менее строгое. 1b5 -> 1.

С помощью 1*number или же +number конвертировать приведет к NaN когда ввод не действительный номер. Хотя в отличие parseInt числа с плавающей запятой будут проанализированы правильно.

Таблица охватывает все возможные соответствующие варианты.

//Variables    // parseInt  parseFloat  + 1* /1   ~~ |0 ^1 >>0  >>>0
var a = '123,',//   123        123       NaN       0     & <<0   0
    b = '1.e3',//   1          1000      1000      1000          1000
    c = '1.21',//   1          1.21      1.21      1             1
    d = '0020',//   16         20        20        20            20
    e = '0x10',//   16         0         16        16            16
    f = '3e9', //   3          3000000000  <--    -1294967296    3000000000
    g = '3e10',//   3          30000000000 <--    -64771072      4230196224
    h = 3e25  ,//   3          3e+25     3e+25     0             0
    i = '3e25',//   3          3e+25     3e+25     0             0
    j = 'a123',//   NaN        NaN       NaN       0             0
    k = '  1 ',//   1          1         1         1             1
    l = '    ',//   NaN        NaN       0         0             0
    m = '.1  ',//   NaN        0.1       0.1       1             1
    n = '1.  ',//   1          1         1         1             1
    o = '1e999',//  1          Infinity  Infinity  0             0
    p = '1e-999',// 1          0         0         0             0
    q = false ,//   NaN        NaN       0         0             0
    r = void 0,//   NaN        NaN       NaN       0             0
    _ = function(){return 1;}, /* Function _ used below */
    s={valueOf:_},//NaN        NaN       1         1             1
    t={toString:_};// 1        1         1         1             1

// Intervals: (-1e+20, +1e20)  (-∞,+∞)   (-∞,+∞)   (-2³¹,+2³¹)   [0, 2³²)
// In FF9 and Chrome 17, Infinity === Math.pow(2, 1024), approx. 1.7976e+308
// In FF9 and Chrome 17, bitwise operators always return 0 after about ±1e+25

Примечания о методах преобразования чисел:

  • Преобразование чисел всегда завершается неудачей, если первый символ после усечения пробела не является числом.
  • parseInt возвращает целочисленное представление первого аргумента. Когда основание (второй аргумент) опущено, основание зависит от заданного ввода.
    0_ = восьмеричное (основание-8), 0x_ = шестнадцатеричный (основание-16). По умолчанию: база-10.
    parseInt игнорирует любые нецифровые символы, даже если аргумент на самом деле был числом: см. h, i.
    Чтобы избежать неожиданных результатов, всегда указывайте основание, обычно 10: parseInt(number, 10),
  • parseFloat самый терпимый конвертер. Он всегда интерпретирует ввод как base-10, независимо от префикса (в отличие от parseInt). Точные правила разбора смотрите здесь.

    Следующие методы всегда не смогут вернуть значащее значение, если строка содержит любые нечисловые символы. (действительные примеры: 1.e+0 .1e-1)
  • +n, 1*n, n*1, n/1 а также Number(n) эквивалентны.
  • ~~n, 0|n, n|0, n^1, 1^n, n&n, n<<0 а также n>>0 эквивалентны. Это побитовые операции со знаком и всегда будут возвращать числовое значение (ноль вместо NaN).
  • n>>>0 также является побитовой операцией, но не резервирует знаковый бит. Следовательно, могут быть представлены только положительные числа, и верхняя граница равна 2 32 вместо 2 31.

  • Когда передан объект, parseFloat а также parseInt будет смотреть только на .toString() метод. Другие методы сначала ищут .valueOf(), затем .toString(), Смотрите д - т.

  • NaN "Не число":
    typeof NaN === 'number'
    NaN !== NaN, Из-за этой неловкости, используйте isNaN() проверить, является ли значение NaN,

Когда использовать какой метод?

  • parseFloat( x ) когда вы хотите получить как можно больше числовых результатов (для заданной строки).
  • parseFloat( (x+'').replace(/^[^0-9.-]+/,'') ) когда вы хотите еще больше числовых результатов.
  • parseInt( x, 10 ) если вы хотите получить целые числа.
  • +x, 1*x .. если вас интересует только получение истинных числовых значений объекта, отклонение любых недопустимых чисел (как NaN).
  • ~~, 0| .. если вы хотите всегда получать числовой результат (ноль для недействительного).
  • >>>0 если отрицательных чисел не существует.
    Последние два метода имеют ограниченный диапазон. Посмотрите на нижний колонтитул таблицы.

Кратчайший способ проверить, является ли данный параметр действительным числом, объясняется в этом ответе:

function isNumber(n) {
    return typeof n == 'number' && !isNaN(n - n);
}
Другие вопросы по тегам