a={prop:a}vs a.prop=a:为什么第一个不是循环数据结构
a = {prop: a} vs a.prop = a: why is the first not a circular data structure?
以下内容之间有什么区别?对我来说,它们看起来是等价的,但其中一个产生了循环数据结构,而另一个则没有。
var a = {};
a = {prop: a};
JSON.stringify(a); // {"prop":{}}
var b = {};
b.prop = b;
JSON.stringify(b); // TypeError: Circular
为什么第2行的prop: a
不指向对象a
并导致循环数据结构?
{prop: a}
在分配给a
之前进行评估。当它被求值时,a
仍然指原始的空对象。结果是一个具有引用原始对象的属性的新对象。
相反,b.prop = b
使用引用该对象的新属性来修改原始b
对象。右侧的b
不会简单地计算为"没有属性集的普通对象";它指的是一个特定的对象,特别是您正在修改的对象。
a = {prop: a};
创建另一个对象,因此在第一种情况下,有两个对象,在第二种情况下只有一个。
为什么2号线上的道具没有指向
确实如此,只是您正在更改a
在同一行中引用的对象。
这应该可以回答您的问题:
var a = {prop:a};
console.log(a); //{prop:undefined}
在第一个示例中,您正在重置变量。因此,a.prop
是指原始的a
。仅仅因为重新分配了标识符a
并不会更改对象引用。
在第二个示例中,将b.prop
设置为b
本身,但不覆盖b
。因此,它将以循环结束。
相关文章:
- jQuery:循环一个具有不同超时值的循环
- 在循环中分配json值时,值被覆盖
- 如何在下面的ES6循环中获得前面的文本
- 为什么“;未定义的“;在JavaScript中结束循环
- Javascript循环不会自我更新
- $(this).prop('property') vs. this.property
- 如何使用jquery处理php循环通过元素
- 而循环只设置php中输入字段中的第一个值
- 循环遍历数组中的特定索引
- Javascript返回值只在循环中返回一次
- 按照选项卡索引的顺序循环一个jQuery选择
- 循环遍历以数组为值的Javascript对象
- 为什么JavaScript在for循环为3时向所有4发出警报
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 循环结束/推送到数组之前在页面上呈现EJS
- 循环比赛位置算法
- jQuery循环在特定位置暂停
- 我的javascript for循环不起作用
- a={prop:a}vs a.prop=a:为什么第一个不是循环数据结构
- 如何在for(prop in obj)循环中分配内存,最好的方法是什么