1

我正在编写一个 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 acknowledge clean === 1,并且animation是一个以对象作为其第一个子对象和数字 3000 作为其第二个子对象的数组。

Firebug 告诉我animation评估为数字 3000。我做错了什么?

4

3 回答 3

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 中没有“元组”类型。)

另外,使用var i in而不是 (typo) in in。遗忘var会给你一个意外的全局,可能会带来令人讨厌的调试副作用。

于 2010-03-28T14:06:42.900 回答
1

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

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)。只有最后一个值很重要,其他值只是忽略(但无论如何都会运行,所以会有任何副作用)。

于 2010-03-28T14:14:29.743 回答
0

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

于 2010-03-28T14:07:17.187 回答