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

Why does $().map Produces Circular Reference

本文关键字:循环 引用 map 为什么      更新时间:2023-11-19

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以不同的顺序传递参数,但这对本例来说并不重要,因为它们都是简单的类型(字符串、数字)。

jQuery .map()函数返回的jQuery对象包含一个数组,而不是实际的数组,这可能是一个重要的区别。尝试调用:
var json2 = JSON.stringify(mappedArray2.get());

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