2013-05-17 4 views
0

Это не проблема как таковая - более общий запрос.Непосредственно установка переменной в виде числа дает NaN с последующими математическими функциями

Следующий (рабочий код) прокручивает таблицу товаров, выбирает цену и количество, введенные для каждого элемента, и добавляет результаты в переменную «cartTotal».

function updateCart(){ 
    var cartTotal = 0; 
    jQ('#cartItems').find('tr').each(function(){ 
     $this = jQ(this); 
     var price = $this.find('.itemPrice').text(); 
      price = Number(price.replace(/[^0-9\.]+/g,"")); 
     var qty = $this.find('input').val(); 
     var itemTotal = (price * qty); 
     cartTotal += itemTotal; 
    }); 
    console.log(cartTotal); 
}; 

Первоначально я объявил cartTotal, не давая ему значение 0 - Я предполагал, что с Javascript быть свободно набраны, это будет «знать» cartTotal это число, как только цифры были добавлены к нему, так как это что я понял, из разных сообщений/статей, которые я прочитал. Но консоль зарегистрировала NaN.

Возможно, я использовал функцию «свободно набрав» слишком буквально. Может ли кто-то пролить свет на то, почему он не дал ему начального значения, дал NaN?

ответ

2

Причина заключается в том, что вы пытаетесь добавить номер к undefined переменной, JavaScript undefined + 10 для бывших возвратов NaN, вы можете попробовать его со следующим:

var cartTotal; 
cartTotal += 10; 
console.log(cartTotal); 

Для большого разъяснения по разница между null и undefined посмотреть на этот ответ: Why is null an object and what's the difference between null and undefined?

затягивая типизированных означает, что переменная объявлена ​​без его типа, так

:
var answer = 42; 

свободно напечатан, это всего лишь общая коробка, содержащая Number 42, когда дело доходит до добавления числа, компилятор знает, как суммировать два и дает вам результат.

+0

Значит, объявление переменной (без значения) всегда имеет значение null? – verism

+0

Это не null! – epascarello

+0

К сожалению, спасибо @epascarello, который проскользнул мимо: P –

1

var cartTotal не определен, но затем вы пытаетесь использовать его с помощью + =. Это не будет работать, как JavaScript не знает, какой тип cartTotal как вы не установили его на 0. Его не сильных типов, так не имеет никакого способа знать, чтобы преобразовать неопределенными 0.

См: Example

var cartTotal; // Undefined 
var cartTotal = 0; // Defined as number 


var cartTotal; 
var itemTotal = 12; 
alert("Cart total type: " + typeof(cartTotal)); // Causes an ex so returns NaN. 
cartTotal += itemTotal; 
alert(cartTotal); 

var cartTotal = 0; 
var itemTotal = 12; 
alert("Cart total type: " + typeof(cartTotal)); 
cartTotal += itemTotal; 
alert(cartTotal); 
+0

Я читал о некоторых операторах, действующих как способы изменения типа переменной (числа в строки и т. Д.), Но я думаю, что есть только некоторые очень конкретные примеры этого. – verism

 Смежные вопросы

  • Нет связанных вопросов^_^