javascript - 需要代码解释(它是如何工作的以及为什么)
问题描述
我很难理解下面的代码以及它是如何工作的。
var createNestedObject = function( base, names ) {
for( var i = 0; i < names.length; i++ ) {
base = base[ names[i] ] = base[ names[i] ] || {};
}
};
// Usage:
createNestedObject( window, ["shapes", "triangle", "points"] );
// Now window.shapes.triangle.points is an empty object, ready to be used.
它来自这个 Q/A: Javascript:如何使用数组给出的对象名称动态创建嵌套对象
你能解释一下base = base[ names[i] ] = base[ names[i] ] || {};
工作原理吗?
由于上面的代码,我的思维过程卡住了。让我发狂。
解决方案
你能解释一下如何
base = base[ names[i] ] = base[ names[i] ] || {}
; 作品?
假设我们在循环的第一圈,所以base
is window
,i
is0
和names[i]
is “shapes”。评估的第一部分是base[ names[i] ] || {}
。这将解决window.shapes
它是否存在,或者如果它不存在则为空对象。
接下来,我们向左移动到这个作业:
base[ names[i] ] = base[ names[i] ] || {};
这将分配给window.shapes
我们从右侧得到的任何东西。因此,如果window.shapes
已经存在,我们将其分配给自身,并且没有任何变化。或者如果它不存在,我们给它分配一个空对象。
再向左移动一次:
base = base[ names[i] ] = base[ names[i] ] || {};
我们现在将重新分配base
变量以指向我们刚刚创建的对象(或我们重用的对象)。所以对于下一轮循环,base
不再是window
,而是window.shapes
。
此时循环重复,但我们的变量现在更进一步了。base
是window.shapes
、i
是1
、names[i]
是“三角形”。从base
is now 开始window.shapes
,我们正在探测并分配给更深一层的对象。因此,虽然第一次通过循环我们确定window.shapes
存在,但这次我们正在检查是否window.shapes.triangle
存在。因此,它会随着每次循环继续,越来越深入地进入对象。
推荐阅读
- node.js - node.js 的 MongoDB 驱动程序性能缓慢
- npm - 在这个项目中找不到 expo - 你运行 yarn / npm install 了吗?
- woocommerce - WooCommerce 父类别功能挂钩
- pdf-generation - 有没有办法创建大于 10 MB 的 PDF
- php - CodeIgniter 4 如何在控制器中加载模型?
- amazon-web-services - 适用于 gp2 的 AWS RDS 消息
- python - 在多工作者设置中使用 asyncio.run 时,是否需要为事件循环保留线程或重用事件循环?
- reactjs - React-typescript chart.js 错误 'type' is missing in type
- azure - 如何查找 azure policy 来宾配置详细信息
- web-scraping - 有没有办法抓取特定按钮的基础数据?