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;重新设置所有简单类型(字符串,数字)。
答案 0 :(得分:19)
jQuery .map()
函数返回一个包含数组的jQuery对象,而不是实际的数组,这可能是一个重要的区别。试着打电话:
var json2 = JSON.stringify(mappedArray2.get());
对.get()
的调用将返回实际数组而不是jQuery对象。