我希望这不会是一个重复的帖子。我尝试了所有的帖子,虽然我能够得到我想要的东西,但是我无法理解为什么它会以这种方式工作。
用例:我想从脚本创建一个Javascript嵌套对象。为此,我从其中一个堆栈溢出帖子中找到了以下脚本
var o = {};
function setByPath(obj,path, value) {
var parts = path.split('.');
var o = obj;
if (parts.length > 1) {
for (var i = 0; i < parts.length - 1; i++) {
if (!o[parts[i]])
o[parts[i]] = {};
o = o[parts[i]];
}
}
o[parts[parts.length - 1]] = value;
}
setByPath(o,"path.path2.path","kunjdab");
console.log(o);
第一个的输出是:
o[path][path2][path] = "kunjdab"
然后我试着修改它只是为了学习这个,并尝试了这个:
function setByPath(path, value) {
var parts = path.split('.');
var o = {}
if (parts.length > 1) {
for (var i = 0; i < parts.length - 1; i++) {
if (!o[parts[i]])
o[parts[i]] = {};
o = o[parts[i]];
}
}
o[parts[parts.length - 1]] = value;
return o
}
var o = setByPath("path.path2.path","kunjdab");
console.log(o);
第二个o[path] = "kunjdab"
第一个片段工作得很好,但第二个片段没有。我不确定为什么。有人能帮助我吗?
我做了,通过引用读取Javascript调用和按值调用。在第一种情况下,o
的引用将作为值传递给函数。但我仍然无法理解为什么第一个有效,第二个没有。