2014-09-01 31 views
1
function NumberAddition(str) { 
    var nstr = str.match(/[0-9]+/g); 
    var total = 0; 
    if (nstr !== null) 
    for (var i = 0; i < nstr.length; i++) { 
    total += nstr[i]*1; 
    }  
    // code goes here 
    return total; 
    } 

我正在查看coderbyte.com中的答案,這是其中之一。我的問題是關於total += nstr[i]*1部分。如果我刪除*1,則答案會連接到「2344」。但答案應該是23 + 4 + 4 = 31。爲什麼是這樣?無法理解涉及號碼添加的功能

回答

3

*1強制將nstr[i]中的字符串轉換爲數字。另一種方式來做到這將是

total += +nstr[i]; 

*(乘)操作只對數字有意義的,並且語言定義規定,當它的參數是數字,它們應轉換。當然,如果nstr[i]不是真的數字(在你的情況下不太可能,如果不是不可能的話),那麼結果將是NaN的值。同樣,一元運算符+也強制其操作數轉換爲數字。

3

將值乘以1是一種確保將其轉換爲數字的方法。當你在JavaScript中添加兩個東西時,如果或者是一個字符串,那麼操作將被評估爲字符串連接,而不是加法。由於nstr中的值是正則表達式匹配的結果,因此它們是字符串值,而不是數值。

您可以將值乘以1以確保將其視爲數字。執行此操作的規範JavaScript方法是使用一元運算符+total += +(nstr[i]);)。

> "1"+1 
"11" 
> 1+"1" 
"11" 
> 1+1 
2 
> ("1"*1)+1 
2 
> (+"1")+1 
2 
+0

太棒了!謝謝你的協助。 – Connor 2014-09-01 22:54:31

+0

@ Connor注意到「轉換」爲數字只是爲了評估表達式,'nstr [i]'仍然是一個字符串。 – RobG 2014-09-01 23:07:53