Почему это возвращает NaN? - PullRequest
       2

Почему это возвращает NaN?

0 голосов
/ 10 августа 2011
model.qty = (parseInt($('#amendOrderQty').val()) == NaN) ? 
  0 : 
  parseInt($('#amendOrderQty').val());

// model.qty === NaN when #amendOrderQty is left blank

Я пытаюсь установить значение 0, когда поле оставлено пустым. Почему это не работает?

Ответы [ 3 ]

3 голосов
/ 10 августа 2011

Вы не можете использовать оператор сравнения с NaN, он будет всегда возвращать false.

Используйте isNaN() вместо

var qty = parseInt($('#amendOrderQty').val());
model.qty = isNaN(qty) ? 0 : qty;
1 голос
/ 10 августа 2011

Вместо этого используйте «isFinite».

var x = parseInt($('#amendOrderQty').val();
model.qty = isFinite(x) ? x : 0;
1 голос
/ 10 августа 2011

Вы не можете напрямую сравнить что-то с NaN, потому что

NaN === NaN

всегда возвращает false.


В свете этого вам следует заменить

parseInt($('#amendOrderQty').val()) == NaN

с

isNan(parseInt($('#amendOrderQty').val()))


Ваш код с рефакторингом и исправлением должен выглядеть примерно так:

var orderQtyVal = parseInt($('#amendOrderQty').val());
model.qty = isNaN(orderQtyVal) ? 0 : orderQtyVal;
...