gpt4 book ai didi

javascript - JavaScript 中的两个连续相等如何工作?

转载 作者:行者123 更新时间:2023-12-03 06:02:42 27 4
gpt4 key购买 nike

基本上,代码行 curr = curr[ch] = curr[ch] || {} 将变量 ch 设置为对象的键,并将 {} 设置为对象的值,然后指向其子引用。

但是有人可以详细解释一下它是如何工作的吗?谢谢

http://jsbin.com/gokapoc/1/edit?js,console

let root = {};
let curr = root;

let ch = 'a';
curr = curr[ch] = curr[ch] || {};
ch = 'b';
curr = curr[ch] = curr[ch] || {};
ch = 'c';
curr = curr[ch] = curr[ch] || {};

console.log(root);

它将显示结果:

{
a: {
b: {
c: {}
}
}
}

最佳答案

让我们来演练一下。我添加了括号以使事情更清楚 - 它们不会改变含义。

let root = {};
let curr = root;

到目前为止没什么困难

let ch = 'a';
curr = (curr[ch] = (curr[ch] || {}));

好的,所以curr[ch]undefined目前因为没有属性(property)a ( ch 的当前值)在 curr 中它指向与 root 相同的对象。因此,最里面的括号的计算结果为 {}

该值被分配给curr[ch] 。显然有一个属性 aroot现在反对。

最后,这个对象( root.a )被分配给 curr ,因为外括号中的赋值返回分配的值,即属性 a 处的对象.

ch = 'b';
curr = (curr[ch] = (curr[ch] || {}));

与之前基本相同,只是需要注意 curr不是root这里是 root.a 的同一个对象点。到底curr将指向与 root.a.b 相同的对象.

ch = 'c';
curr = (curr[ch] = (curr[ch] || {}));

是的,现在应该很清楚了。

非常紧凑但不是很清晰的代码。

关于javascript - JavaScript 中的两个连续相等如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39689991/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com