Javascript函数编程&x2014;接收详细参数

Javascript函数编程&x2014;接收详细参数,javascript,arrays,function,parameter-passing,Javascript,Arrays,Function,Parameter Passing,我正在编写一个Javascript函数,该函数将处理动态编写并作为参数发送的数组 函数编写如下: function returnJourney(animation,clean){ var properties = {}; // loads of other inane stuff for(i in animation[0]) properties[animation[0][i]] = animation[0].i; // heaps more inane stuf

我正在编写一个Javascript函数,该函数将处理动态编写并作为参数发送的数组

函数编写如下:

function returnJourney(animation,clean){
    var properties = {};
    // loads of other inane stuff
    for(i in animation[0]) properties[animation[0][i]] = animation[0].i;
    // heaps more inane stuff
}
所讨论的动画是jQuery动画的一组参数。通常它采用
({key:value,key:value},speedAsInteger,modifierString)的格式

因此,要启动初始调试,我将其称为:

returnJourney({'foo':'bar'},3000),1

直接说来,一切都很遥远。在我看来,这应该是一个数组,对象是它的第一个子对象,数字3000是它的第二个子对象

Firebug告诉我
动画
的计算结果为3000。我做错了什么

properties[animation[0][i]] = animation[0].i;
应该是

properties[animation[0][i]] = animation[0][i];
.i
是字面上称为
'i'
的属性。由于该属性(可能)不存在,您将为每个属性指定
undefined

returnJouney(({'foo':'bar'},3000),1);
也没有什么意义 — 你是说数组吗

returnJourney([{'foo':'bar'},3000],1);
(JavaScript中没有“tuple”类型。)


另外,在
中使用
var i,而不是在
中使用(打字)
。忘记
var
会给您一个意外的全局变量,可能会带来恼人的调试副作用。

它将
({'foo':'bar'},3000)
视为一个使用逗号运算符的表达式,该运算符返回正确的操作数作为其结果。也许你的意思是
[{'foo':'bar'},3000]

JavaScript中没有元组类型。您所拥有的只是对象
{}
或数组
[]
。他们都能理解任何类型的混合。因此,您可以将动画参数作为数组传递(
[{'foo':'bar'},3000]
),这看起来正是您想要的。 或者,像通常在JavaScript中所做的那样,改用object:

returnJourney({props: {foo: "bar"}, speed: 3000}, 1);

function returnJourney(animation, clean) {
     var props = animation.props;
     var speed = animation.speed;
}
请注意,对象表示法允许您忽略不希望传递的内容,并使其非常清楚值的含义


至于为什么你的
动画
解析为3000,其实很简单,
操作符就是这样工作的。它返回大括号中的最后一个内容。因此
(10,20,30)
将计算为
30
(f(1000),“hello”,30)
。只有最后一个值很重要,其他值被忽略(但无论如何都要运行,所以会有任何副作用)。

谢谢Bob,只需要一个数组语法刷新器:)