2014-09-01 50 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