为什么$()。map生成循环引用

时间:2012-07-18 14:00:54

标签: javascript jquery

Chrome的array.map工作正常,但jQuery的.map会以某种方式产生循环引用。我无法使用console.log看到任何循环引用的证据,但JSON.stringify会在第二个块中抛出Uncaught TypeError: Converting circular structure to JSON

在JSFiddle:http://jsfiddle.net/langdonx/vQBak/

上运行它

或检查代码:

var callback = function(index, element) {
    return {
        "index": index
    };
};

var array1 = ["1", "2"];
var mappedArray1 = array1.map(callback);
console.log(mappedArray1);
var json1 = JSON.stringify(mappedArray1);
console.log(json1);

var jqueryArray2 = $('body > div');
var mappedArray2 = jqueryArray2.map(callback);
console.log(mappedArray2);
var json2 = JSON.stringify(mappedArray2); // Chokes with "Uncaught TypeError: Converting circular structure to JSON"
console.log(json2);​

是的,我使用相同的回调,是的ECMAScript map以不同的顺序传递参数,但这对于这个例子并不重要,因为它们&# 39;重新设置所有简单类型(字符串,数字)。

1 个答案:

答案 0 :(得分:19)

jQuery .map()函数返回一个包含数组的jQuery对象,而不是实际的数组,这可能是一个重要的区别。试着打电话:

var json2 = JSON.stringify(mappedArray2.get());

.get()的调用将返回实际数组而不是jQuery对象。