无法理解涉及数字添加的功能

时间:2014-09-01 22:46:01

标签: javascript

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。这是为什么?

2 个答案:

答案 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