2013-05-17 32 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); 

有關的一個很好的解釋nullundefined看看這個答案之間的區別: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

相關問題