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

Lan*_*don 8 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);?
Run Code Online (Sandbox Code Playgroud)

是的,我正在使用相同的回调,是的ECMAScript map以不同的顺序传递参数,但这个例子无关紧要,因为它们都是简单类型(字符串,数字).

Ant*_*ist 19

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

var json2 = JSON.stringify(mappedArray2.get());
Run Code Online (Sandbox Code Playgroud)

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

  • @jbabey:他在不同的例子中使用了不同的地图 (2认同)