2017-04-05 99 views
-1

问题:此代码中额外的'+'代表什么?递归函数

数字根是数字中所有数字的递归总和。给定n,取n的数字之和。如果该值有两位数字,则继续以这种方式减少直到产生一位数字。这只适用于自然数。

example: 
digital_root(16) 
=> 1 + 6 
=> 7 

这是已编码的功能:

function digital_root(n) { 
if (n < 10) { 
    return n; 
    } 
     return digital_root(n.toString().split('').reduce(function (a, b) { 
     return a + +b; 
     }, 0)); 
} 

有人能澄清什么额外的+在这行代码是干什么的? return a + +b;

+0

它们以一种不可读的方式将字符串转换为数字。你可以用'a + Number(b)'代替它。 – zerkms

+0

啊!好吧,好吧,我真的很感谢 – jalexyep

回答

0

它可能是一个字符串转换为整数的偷偷摸摸的。您不会说这是什么语言,但许多动态语言允许变量是没有声明的任何类型,并且使用+来进行加法和字符串连接,并在字符串和数字之间进行隐式转换。这样的语言可以很容易地意外地得到错误的东西(当你打算添加时连接,反之亦然)。

但是,使用一个一元+(通常)是一个数字身份,它将其参数转换为数字(如果它恰好是一个字符串 - 如果参数已经是数字,它什么也不做)。那么二进制+将被添加而不是连接。

+0

'一个字符串到一个整数' - >'一个字符串到一个数字' – zerkms