Можно ли как-то вернуть 0 вместо NaN
разбора значений в JavaScript?
В случае пустой строки parseInt
возвращается NaN
.
Можно ли сделать что-то подобное в JavaScript для проверки NaN
?
var value = parseInt(tbb) == NaN ? 0 : parseInt(tbb)
Или, может быть, есть другая функция или плагин jQuery, который может сделать что-то подобное?
javascript
nan
Joper
источник
источник
NaN != NaN
. Тебе нужноisNaN(value)
.parseInt()
дважды (в успешном / обычномNaN
случае) никогда не является хорошей идеей. Помимо неэффективности, для неосторожного, если то, что передается дляtbb
вызова функции с побочными эффектами, это ужасно. Я не стал бы использовать какое-либо решение здесь, где я вижуparseInt()
дважды.Ответы:
Когда не используется с логическими значениями, логический
||
оператор OR ( ) возвращает первое выражение (parseInt(s)
), если оно может быть оценено как true, в противном случае он возвращает второе выражение (0). Возвращаемое значениеparseInt('')
NaN. NaN оценивается как ложное, поэтому вnum
конечном итоге устанавливается на 0.источник
0
вместоNaN
. Это решается кодом Мэтта отлично.var nextIphone = parseInt("4S") + 1; // wow it works!
Вы также можете использовать
isNaN()
функцию:источник
parseInt(s)
дважды? Кроме того, это должно бытьparseInt(s, 10)
parseInt()
дважды, хотя.Я был удивлен, не увидев никого упоминания об использовании
Number()
. Конечно, он будет анализировать десятичные дроби, если он предоставлен, поэтому будет действовать иначе, чемparseInt()
, однако, он уже предполагает основание 10 и превратит «или даже» в 0.источник
Для людей, которые не ограничены
parseInt
, вы можете использовать побитовый оператор ИЛИ (который неявно вызываетToInt32
его операнды).Примечание:
ToInt32
отличается отparseInt
. (то естьparseInt('33Ab') === 33
)источник
'10000000000' | 0 === 1410065408
.Math.pow(2, 31)
будет переполнено.Эта проблема
Другие ответы не принимают во внимание, что
0
это ложно, и, следовательно, следующее будет 20 вместо 0:Решение
Я предлагаю вспомогательную функцию, которая решает большинство проблем:
Вспомогательная функция даст следующие результаты:
источник
parseInt(string, radix)
parseInt("0x10") === 16
parseInt("010")
8
defaultTo
функция, которая делает именно это:_.defaultTo(NaN, -1)
возвращает-1
, но_.defaultTo(0, -1);
возвращает0
.parseInt
дваждыДелает ли работа намного чище, чем parseInt, по моему мнению, используйте оператор +
источник
источник
Сделайте отдельную проверку для пустой строки (поскольку это один конкретный случай) и установите ее в ноль в этом случае.
Вы можете добавить «0» в начало, но затем вам нужно добавить префикс, чтобы указать, что это десятичное число, а не восьмеричное число
источник
Почему бы не переопределить функцию? В этом случае вы всегда можете быть уверены, что он вернется
0
в случаеNaN
:Теперь в любом месте вашего кода:
источник
|| 0
ответ, как в ответе Мэтта. Я вижу, что переопределение объектов, которыми вы не владеете, является последним средством, или если вы этого не сделаете, это будет стоить значительно дороже с точки зрения времени и сложности.У меня была похожая проблема (firefox v34) с простыми строками, такими как:
Итак, я придумал быстрый взлом:
А потом все глупо усложнилось, чтобы иметь дело с числами с плавающей запятой для непростых вещей:
Он вернет 0 для таких вещей, как:
источник
источник
||
подходу. Я знаю, что это старый вопрос и ответ, но этот ответ избегает вызова parseInt дважды и использует isNaN правильно. Это просто нужно, чтобы основаниеparseInt(x, 10)
было тщательным. (Я предпочитаю отдельную внутреннюю переменную вместо повторного использованияx
.)Я создал 2 прототипа, чтобы обработать это для меня, один для числа и один для строки.
Если вы не хотите использовать проверку безопасности, используйте
Пример использования:
источник
Объяснение, для тех, кто не считает это тривиальным:
Умножение на единицу, метод, называемый «неявное приведение», пытается превратить операнд неизвестного типа в примитивный тип «число». В частности, пустая строка станет номером 0, что делает ее подходящим типом для parseInt () ...
Очень хороший пример также привел выше PirateApp, который предложил добавить знак +, заставляя JavaScript использовать неявное приведение числа.
источник
parseInt('str'*1)
parseInt
на то, что уже является номером? Это повлечет за собой еще одно преобразование обратно в строку, только чтобы преобразовать это число снова.Кроме того, почему бы не написать функцию и вызывать ее там, где это необходимо. Я предполагаю, что это вход в поля формы для выполнения расчетов.
что не так делает?
источник
NaN
.Вот метод tryParseInt, который я использую, он принимает значение по умолчанию в качестве второго параметра, поэтому он может быть любым, что вам нужно.
источник
вспомогательная функция, которая все еще позволяет использовать основание
источник
Вы можете иметь очень чистый код, у меня были похожие проблемы, и я решил это с помощью:
источник
Для других людей, которые ищут это решение, просто используйте: ~~ без parseInt, это самый чистый режим.
Если NaN, он вернет 0 вместо.
источник