1

这给了我一个关于数字 1、2 和 3 的警报。

[1,2,3].forEach(alert);

这给了我一个错误:

$.extend(true, {}, [1,2,3]).forEach(alert);

错误:

TypeError: Object #<Object> has no method 'forEach'

为什么会发生这种情况,如何循环克隆对象?

4

4 回答 4

5

您的.extend()调用是创建一个普通对象,而不是一个数组。(也就是说,您实际上并没有创建“深度克隆数组”。)没有像.forEach普通对象那样的迭代器。

于 2012-10-25T20:57:08.933 回答
2

原因很简单,因为数组[]forEach方法,而对象{}没有。

如果你有一个对象数组,你可以forEach通过数组。
如果你有一个对象,它的一个属性是一个数组,你可以forEachobj.arr.forEach.
如果你有一个数组数组,每个数组都有对象,数组作为属性,你可以设置一个函数,forEach通过外部数组,然后forEach通过内部数组的对象,然后访问保存数组的对象的属性,然后forEach通过那个。

但是你不能{}.forEach使用 vanilla JS。

于 2012-10-25T21:00:53.560 回答
0

我认为你想要的方法是.each()

没关系,我看错了你的问题......

于 2012-10-25T20:56:25.813 回答
0

如果要循环遍历对象数组,可以使用,

var numbs = $.extend(true, {}, [1,2,3]);

for (var numb in numbs){
    alert(numbs[numb]);
}

在小提琴中工作。 http://jsfiddle.net/v6KFn/

于 2013-07-18T17:02:48.197 回答