jQuery.extend方法处理这种循环引用会报错,大家有什么好方法能够提前判断一下这种情况呢?

查看:153
本文介绍了jQuery.extend方法处理这种循环引用会报错,大家有什么好方法能够提前判断一下这种情况呢?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

var a = {};
var c = {name: "abc"};
var d = {name: "def"};
d.hack = c;
c.hack = d;

$.extend(true, a, c)

以下是报错信息:
jquery.js?t=1501171352747:2 Uncaught RangeError: Maximum call stack size exceeded
at Function.v.extend.v.fn.extend (jquery.js?t=1501171352747:2)
at Function.v.extend.v.fn.extend (jquery.js?t=1501171352747:2)
at Function.v.extend.v.fn.extend (jquery.js?t=1501171352747:2)
at Function.v.extend.v.fn.extend (jquery.js?t=1501171352747:2)
at Function.v.extend.v.fn.extend (jquery.js?t=1501171352747:2)
at Function.v.extend.v.fn.extend (jquery.js?t=1501171352747:2)
at Function.v.extend.v.fn.extend (jquery.js?t=1501171352747:2)
at Function.v.extend.v.fn.extend (jquery.js?t=1501171352747:2)
at Function.v.extend.v.fn.extend (jquery.js?t=1501171352747:2)
at Function.v.extend.v.fn.extend (jquery.js?t=1501171352747:2)

解决方案

狗狗一下,很久以前就有人遇到过这个问题。
请参考:https://bugs.jquery.com/ticke...

里面有建议用 Lo-dash 库来处理这个问题:
https://lodash.com/

另外还有相似的问题:
https://stackoverflow.com/que...

依我看,你用手写了死循环,就要自己用脚走出来。。。一开始就用 deep copy 就好。

var a = {};
var c = {name: "abc"};
var d = {name: "def"};
d.hack = $.extend(true, {}, c);
c.hack = $.extend(true, {}, d);

var y = $.extend(true, a, c);
console.log(y);

这篇关于jQuery.extend方法处理这种循环引用会报错,大家有什么好方法能够提前判断一下这种情况呢?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆