在JavaScript中,在一种奇怪的情况下,将数组作为参数传递失败
我希望能够从另一个方法调用中获取一个数组,并在将其传递给另一个函数时附加一个参数。读完后,我做了以下咖啡脚本:在JavaScript中,在一种奇怪的情况下,将数组作为参数传递失败,javascript,coffeescript,Javascript,Coffeescript,我希望能够从另一个方法调用中获取一个数组,并在将其传递给另一个函数时附加一个参数。读完后,我做了以下咖啡脚本: class TestMe some_meth: (four) -> (console.log e) for e in four foo= [37.5,5,255.0] t= new TestMe() t.some_meth(foo...,1) 它编译成以下JavaScript(coffee版本1.9.1): (函数(){ 变量TestMe,foo,t, 切片=[]
class TestMe
some_meth: (four) ->
(console.log e) for e in four
foo= [37.5,5,255.0]
t= new TestMe()
t.some_meth(foo...,1)
它编译成以下JavaScript(coffee版本1.9.1):
(函数(){
变量TestMe,foo,t,
切片=[].slice;
TestMe=(函数(){
函数TestMe(){}
TestMe.prototype.some_meth=函数(四){
变量e,i,len,结果;
结果=[];
对于(i=0,len=4.length;i
这不会产生任何输出
在调试程序(节点调试
)中,我发现函数的参数只是数组的第一个元素(而不是数组)。这很奇怪,因为如果我在调试器中执行slice.call(foo.concat([1])
,我会得到一个数组作为输出。如果我将some\u meth
的签名更改为接受四个参数,则输出与预期一样
显然,我有几种解决方法,我将使用其中一种,但我当然更喜欢能够编写t的清晰和简单
有人能理解为什么这个习语不能像预期的那样起作用吗?要实现传递一个由四个元素组成的数组的目标,惯用的方法是什么,其中一个元素是常量,其余的元素来自另一个数组?您的bug位于t.some_meth(foo…,1)
。您正在将数字数组的内容作为参数传递给t.some\u meth
。因此,ìn
失败,因为四不是一个数组,而是一个数字37.5
正确的做法是:
t.some_meth [foo..., 1]
因此传入数组。results.push(console.log(e))
将是一大堆未定义的,因为console.log
不会返回任何内容。看起来您正在映射输入列表,而不是简单地对其进行迭代。如果您只想传递数组,请传递数组,不要展开它。@mu您是对的:我的答案不清楚。我已经编辑过了,希望更清楚。谢谢。我不太确定我怎么会错过这一点,因为事后看来这是多么明显!
t.some_meth [foo..., 1]