Как превратить NaN из parseInt в 0 для пустой строки? - PullRequest
270 голосов
/ 18 июля 2011

Можно ли как-то вернуть 0 вместо NaN при разборе значений в JavaScript?

В случае пустой строки parseInt возвращает NaN.

Можно ли сделать что-то подобное в JavaScript, чтобы проверить NaN?

var value = parseInt(tbb) == NaN ? 0 : parseInt(tbb)

Или, может быть, есть другая функция или плагин jQuery, который может делать что-то подобное?

Ответы [ 17 ]

1 голос
/ 18 июля 2011

Выполните отдельную проверку для пустой строки (так как это один конкретный случай) и установите ее в ноль в этом случае.

Вы можете добавить «0» в начало, но затем вам нужно добавить префикс, чтобы указать, что это десятичное, а не восьмеричное число

1 голос
/ 16 августа 2018
// implicit cast
var value = parseInt(tbb*1); // see original question

Объяснение, для тех, кто не находит его тривиальным:

Умножение на единицу, метод, называемый «неявное приведение», пытается превратить операнд неизвестного типа в примитивный тип «число». В частности, пустая строка станет номером 0, что делает ее подходящим типом для parseInt () ...

Очень хороший пример также привел выше PirateApp, который предложил добавить знак +, заставляя JavaScript использовать неявное приведение числа.

0 голосов
/ 30 ноября 2018

У вас может быть очень чистый код, у меня были похожие проблемы, и я решил его с помощью:

var a="bcd";
~~parseInt(a);
0 голосов
/ 03 мая 2013

Кроме того, почему бы не написать функцию и вызывать ее там, где это необходимо.Я предполагаю, что это ввод в поля формы для выполнения расчетов.

var Nanprocessor = function (entry) {
    if(entry=="NaN") {
        return 0;
    } else {
        return entry;
    }
}

 outputfield.value = Nanprocessor(x); 

// where x is a value that is collected from a from field
// i.e say x =parseInt(formfield1.value); 

что не так делает?

0 голосов
/ 03 июля 2018

вспомогательная функция, которая все еще позволяет использовать radix

function parseIntWithFallback(s, fallback, radix) {
    var parsed = parseInt(s, radix);
    return isNaN(parsed) ? fallback : parsed;
}
0 голосов
/ 05 июня 2018

Я создал 2 прототипа, чтобы обработать это для меня, один для числа и один для строки.

// This is a safety check to make sure the prototype is not already defined.
Function.prototype.method = function (name, func) {
    if (!this.prototype[name]) {
        this.prototype[name] = func;
        return this;
    }
};

// returns the int value or -1 by default if it fails
Number.method('tryParseInt', function (defaultValue) {
    return parseInt(this) == this ? parseInt(this) : (defaultValue === undefined ? -1 : defaultValue);
});

// returns the int value or -1 by default if it fails
String.method('tryParseInt', function (defaultValue) {
    return parseInt(this) == this ? parseInt(this) : (defaultValue === undefined ? -1 : defaultValue);
});

Если вы не хотите использовать проверку безопасности, используйте

String.prototype.tryParseInt = function(){
    /*Method body here*/
};
Number.prototype.tryParseInt = function(){
     /*Method body here*/
};

Пример использования:

var test = 1;
console.log(test.tryParseInt()); // returns 1

var test2 = '1';
console.log(test2.tryParseInt()); // returns 1

var test3 = '1a';
console.log(test3.tryParseInt()); // returns -1 as that is the default

var test4 = '1a';
console.log(test4.tryParseInt(0));// returns 0, the specified default value
0 голосов
/ 12 февраля 2018

Вот метод tryParseInt, который я использую, он принимает значение по умолчанию в качестве второго параметра, поэтому он может быть любым, что вам нужно.

function tryParseInt(str, defaultValue) {
    return parseInt(str) == str ? parseInt(str) : defaultValue;
}

tryParseInt("", 0);//0 
tryParseInt("string", 0);//0 
tryParseInt("558", 0);//558
...