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。这是为什么?
答案 0 :(得分:3)
*1
强制将nstr[i]
中的字符串转换为数字。另一种方法是
total += +nstr[i];
*
(乘法)运算符仅对数字有意义,并且语言定义规定当其参数不数字时,应转换它们。当然,如果nstr[i]
不是真正的数字(在您的情况下不太可能,如果不是不可能的话),那么结果将是NaN
值。同样,一元+
运算符也强制将其操作数转换为数字。
答案 1 :(得分: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