难以理解涉及数字加法的功能

Having trouble understanding function involving number addition

本文关键字:功能 数字      更新时间:2023-09-26
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。这是为什么呢?

*1强制将 nstr[i] 中的字符串转换为数字。另一种方法是

  total += +nstr[i];

*(乘法(运算符只对数字有意义,语言定义规定,当它的参数不是数字时,应该转换它们。当然,如果nstr[i]不是真正的数字(在您的情况下不太可能,如果不是不可能的话(,那么结果将是一个NaN值。同样,一元+运算符也强制将其操作数转换为数字。

将值乘以 1 是一种确保它被转换为数字的方法(如果不是(。 当你在 JavaScript 中添加两个东西时,如果其中一个是字符串,那么该操作将被评估为字符串连接,而不是加法。 由于 nstr 中的值是正则表达式匹配的结果,因此它们是字符串值,而不是数字值。

您可以将值乘以 1 以确保将其视为数字。 规范的JavaScript方法是使用一元+运算符(total += +(nstr[i]);(。

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