Function.prototype.bind隐式地将数字转换为对象

时间:2017-04-17 03:40:42

标签: javascript coffeescript

我试图在CoffeeScript中做一些函数式编程并写了一个currying函数:

curry = (func, ref=null, length=func.length) ->
  (args...) ->
    if args.length >= length
      func.apply ref, args
    else
      curry (func.bind ref, args), ref, length - args.length

很自然地,我用这个简单的add函数来测试它:

add = (a, b) ->
  a + b

alert add 3.1, -2
alert (curry add)(3.1)(-2)

未经审核的add按预期返回1.1,但咖喱add返回"3.1-2"。出于某种原因,在有条件的add内,typeof a更改了对象,而typeof b仍为数字。我已经跟踪了bind调用的所有类型,这使我得出结论Function.prototype.bind正在将数字转换为对象。

Relevant JSFiddle

为什么会发生这种情况,我该怎么做才能阻止类型转换?

0 个答案:

没有答案