Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中,在一种奇怪的情况下,将数组作为参数传递失败_Javascript_Coffeescript - Fatal编程技术网

在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]