2009-10-27 63 views
-2

我有兩個變量,「A」和「B」在我的JavaScript,我想將它們加在一起 ​​- 我認爲這代碼:JS瓦爾 - 添加

var a = 10; 
var b = 30 
var varible = a + b; 

此,把兩個數字未來彼此......任何想法爲什麼......結果應該是40?

+0

我很驚訝某人如何低估了這個問題。是否因爲代碼中有錯誤?令人驚歎的... – Victor 2009-10-27 13:17:00

+0

請編輯您的代碼並重命名「'new'」變量。維克托是正確的,代碼張貼作爲例子應該是功能性的,不會引入新的錯誤。 – Boldewyn 2009-10-27 13:29:58

+1

因爲他遇到的問題不能是該代碼的結果,即使'new'已修復。 – 2009-10-27 14:27:36

回答

4

你可能有一個字符串,而不是整數。這是你的代碼真的是這樣的:

var a = "10"; 
var b = "30"; 
var c = a + b; // "1030" 

several ways的字符串轉換爲整數:

a = parseInt(a, 10); // Parse the string 
b = b * 1;   // Force interpretation as number 
+2

小心使用parseInt而不指定radix參數。 – 2009-10-27 13:14:54

2

new是一個保留字,我會在任何情況下使用別的東西。

而且隨着c它的工作對我來說是正常的變量名:

var a = 10; 
var b = 30 
var c = a + b; 
alert(c); 

做了預期,並警告40

+0

他發佈的代碼顯然不是他在現實生活中使用的代碼,因爲(大多數?)JavaScript解釋器在這種情況下會引發語法錯誤。另外,他的一個變量可能包含一個字符串。 – 2009-10-27 13:07:39

+2

但是這是發佈代碼中的錯誤。我無法讀取未發佈的代碼,對不起。 – Victor 2009-10-27 13:08:50

0

一個或兩個是一個字符串。如果你從HTML輸入或其他東西獲得值,他們肯定是。通過使用parseInt確保它們都是整數:

var newValue = parseInt(a,10) + parseInt(b,10); 

此外,'new'是關鍵字。你不能用這個變量名稱:)

+1

小心使用沒有radix參數的parseInt。你可能很容易陷入困境,特別是如果可能有前導零。 – 2009-10-27 13:16:04

1

new是JavaScript中的一個關鍵字。你不應該用它來聲明你的變量或函數。從新改變變量名其他

1

你確定你沒有做這樣的:

var a = '30'; 
var b = '40'; 

在這裏,我給「30」作爲一個字符串,而不是一個號碼,我會期待「+」運算符連接兩個字符串。由於這是人爲設計的代碼,因此您可能無法完全確定變量初始分配的位置或其類型。你可以這樣檢查:

var a = '30'; 
var b = '40'; 
alert(typeof(a) + '\n' + typeof(b)); 

如果其中任何一個說'對象'或'字符串'而不是'數字'這是你的問題。一種可能發生的,你沒有想到的方式是輸入。假設你有這樣的代碼:

<input id="a" value="30" /> 
<input id="b" value="40" /> 
<script language="javascript"> 
    var a = document.getElementById('a').value; 
    var b = document.getElementById('b').value; 
</script> 

這裏,文本輸入的值始終是一個字符串。

如果你想給一個變量轉換爲數字第一,你應該使用類似myVar - 0要挾數字操作或更正式的parseInt()parseFloat()功能(不要忘記parseInt()基數參數)。並且總是在結果上檢查isNaN()

+0

+1爲什麼downvoted? – 2009-10-27 13:14:01

+0

缺乏解決方案。 – 2009-10-27 13:28:53

+0

他沒有要求解決方案。他要求「爲什麼」。通常這更重要。你可能已經知道你可以做些什麼來修復它,但你想知道它爲什麼會被破壞,這樣你就可以理解這個問題,並在未來完全避免它。也就是說,我在帖子底部添加了解決方案建議。 – 2009-10-27 13:32:11

1

我真的很驚訝,直到現在,沒有人提出了明顯的建議:「使用JavaScript進行投射」(我將它設置爲引號,因爲它不是真正的投射)。

var a = "1"; // string 
var b = Number(a); // number 
var c = String (b); // string again 

a + b; // "11" 
b + a; // 2 
a + c; // "11" 

現在,爲什麼這不是真正的鑄造?因爲您不會創建一個類型爲「number」的新變量,而是創建一個新的「Number」對象,並用可能是數字的東西對其進行初始化。