我正在编写一个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,modifierAsString)
。
因此,为了启动初始调试,我将其称为:
returnJouney(({'foo':'bar'},3000),1);
直接蝙蝠的事情已经过时了。据我所知,这将有returnJourney确认clean === 1
,而animation
是一个数组,其中一个对象作为其第一个子项,数字3000作为其第二个。
Firebug告诉我animation
评估数字为3000.我做错了什么?
答案 0 :(得分:1)
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 in
而不是(拼写错误)in in
。忘记var
会给你一个意外的全局,可能会产生令人讨厌的副作用。
答案 1 :(得分:1)
JavaScript中没有元组类型。您所拥有的只是对象{}
或数组[]
。他们俩都可以理解任何类型的混合物。因此,您可以将动画参数作为数组([{'foo':'bar'},3000]
)传递,这看起来就像您想要的那样。
或者,正如通常在JavaScript中完成的那样,使用对象:
returnJourney({props: {foo: "bar"}, speed: 3000}, 1);
function returnJourney(animation, clean) {
var props = animation.props;
var speed = animation.speed;
}
请注意,对象表示法允许您忽略您不想传递的内容,并清楚地表明什么值意味着什么。
至于为什么你的animation
解析为3000,这很简单,这就是,
运算符的工作原理。它返回大括号中的最后一个东西。因此,(10, 20, 30)
将评估为30
,(f(1000), "hello", 30)
也将评估为{{1}}。只有最后一个值很重要,其他人只是被忽略(但无论如何都要运行,所以任何副作用都会存在)。
答案 2 :(得分:0)
它使用逗号运算符将({'foo':'bar'},3000)
视为表达式,该运算符返回右操作数作为结果。也许你的意思是[{'foo':'bar'},3000]
。