JavaScript中的嵌套数组

JavaScript中的嵌套数组,javascript,arrays,nested,Javascript,Arrays,Nested,查看以下代码,主题[sprite].img是否嵌套在结果[definition]中。数据作为主题[sprite]。img在主题[sprite]中,以及.img是否成为结果[definition]中自己的元素 如果是这样的话,如果删除了result[definition].data.img,会不会同时删除result[definition].img甚至主题[sprite].img 谢谢。如果删除结果[definition].data.img,则主题[sprite].img也将被删除,因为结果[de

查看以下代码,主题[sprite].img是否嵌套在结果[definition]中。数据作为主题[sprite]。img在主题[sprite]中,以及.img是否成为结果[definition]中自己的元素

如果是这样的话,如果删除了result[definition].data.img,会不会同时删除result[definition].img甚至主题[sprite].img

谢谢。

如果删除结果[definition].data.img,则主题[sprite].img也将被删除,因为结果[definiton].data和主题[sprite]是完全相同的单个对象。结果[definition].img将保留其值,因为结果[definition]是单独的对象,在其.img属性中具有另一个对象的.img副本

但这与嵌套没有任何关系。您只需引用相同的对象。

如果删除结果[definition].data.img,则主题[sprite].img也将被删除,因为结果[definiton].data和主题[sprite]是完全相同的单个对象。结果[definition].img将保留其值,因为结果[definition]是单独的对象,在其.img属性中具有另一个对象的.img副本

但这与嵌套没有任何关系。您只需引用同一个对象

如果删除了结果[definition].data.img,是否也会删除结果[definition].img

不是。对象是引用类型。虽然将从主题[sprite]中观察到删除,但从结果[definition]中不会观察到删除

因为主题[sprite]和结果[definition].数据是对同一对象的引用,所以对该对象所做的任何更改都可以从对该对象的任何引用中观察到

但由于result[definition].img是对另一个对象恰好引用的另一个对象的引用,因此它是一个完全唯一的引用,不受另一个对象中发生的情况的影响

如果删除其中一个img属性,则另一个保持不变

如果删除了结果[definition].data.img,是否也会删除结果[definition].img

不是。对象是引用类型。虽然将从主题[sprite]中观察到删除,但从结果[definition]中不会观察到删除

因为主题[sprite]和结果[definition].数据是对同一对象的引用,所以对该对象所做的任何更改都可以从对该对象的任何引用中观察到

但由于result[definition].img是对另一个对象恰好引用的另一个对象的引用,因此它是一个完全唯一的引用,不受另一个对象中发生的情况的影响


如果删除其中一个img属性,另一个保持不变。

Oleg和Cliffs的答案是正确的。然而,我认为为了可视化的目的,看看这些物体的实际形状可能是有用的:

var definition = "Foo",
    sprite     = "Bar",

    result = {},
    theme  = {}
;

result[ definition ] = {}
// => result == { Foo : {} }

theme[ sprite ] = { img : "BAZ" }
// => theme == { Bar : { img : "BAZ" } }

result[ definition ].data = theme[ sprite ];
// => result == { Foo : {
//                  data : { img : "BAZ" }
//                }
//              }

result[ definition ].img  = theme[ sprite ].img;
// => result == { Foo : {
//                  data : { img : "BAZ" },
//                  img  : "BAZ"
//                }
//              }

delete result[ definition ].data.img;

console.log( result.[ definition ].data.img );
// => undefined


console.log( theme[ sprite ].img );
// => undefined

console.log( result[ definition ].img
// => "BAZ"

奥列格和克利夫的答案是正确的。然而,我认为为了可视化的目的,看看这些物体的实际形状可能是有用的:

var definition = "Foo",
    sprite     = "Bar",

    result = {},
    theme  = {}
;

result[ definition ] = {}
// => result == { Foo : {} }

theme[ sprite ] = { img : "BAZ" }
// => theme == { Bar : { img : "BAZ" } }

result[ definition ].data = theme[ sprite ];
// => result == { Foo : {
//                  data : { img : "BAZ" }
//                }
//              }

result[ definition ].img  = theme[ sprite ].img;
// => result == { Foo : {
//                  data : { img : "BAZ" },
//                  img  : "BAZ"
//                }
//              }

delete result[ definition ].data.img;

console.log( result.[ definition ].data.img );
// => undefined


console.log( theme[ sprite ].img );
// => undefined

console.log( result[ definition ].img
// => "BAZ"

为什么“result[definition].img”是副本?它不是引用了与“theme[sprite].img;”相同的对象吗?如果img是object,则为yes。但您从不修改img中存储的对象,只修改结果[definition].data和主题[sprite]引用的delete属性对象。我明白了,您不能触摸可能以任何方式存储在.img中的对象。出于某种原因,我认为如果删除了包含对另一个对象的引用的和对象,那么包含的引用对象也会被删除。谢谢为什么“结果[定义].img”是副本?它不是引用了与“theme[sprite].img;”相同的对象吗?如果img是object,则为yes。但您从不修改img中存储的对象,只修改结果[definition].data和主题[sprite]引用的delete属性对象。我明白了,您不能触摸可能以任何方式存储在.img中的对象。出于某种原因,我认为如果删除了包含对另一个对象的引用的和对象,那么包含的引用对象也会被删除。感谢这个图表,虽然它确实使它看起来像附加到sprite/定义的对象属于sprite,如果我错了,请纠正我,该对象同样属于定义。我知道,使用ascii图表可以做的事情只有这么多:Thanks@Exceii:说得好。我可能会尝试将其稍作调整,作为我的降价图技能的练习:但你是对的,最右边的物体不比另一个物体拥有更多或更少。它们都是相同的引用。很好的图表,虽然它确实让它看起来像附加到sprite/定义的对象属于sprite,如果我错了,请纠正我,对象同样属于定义。我知道,使用ascii图表可以做的事情只有这么多:Thanks@Exceii:说得好。我可能会尝试将其稍作调整,作为我的降价图技能的练习:但你是对的,最右边的物体或多或少不属于一个ob 一个比另一个好。它们是相同的参考资料。
var definition = "Foo",
    sprite     = "Bar",

    result = {},
    theme  = {}
;

result[ definition ] = {}
// => result == { Foo : {} }

theme[ sprite ] = { img : "BAZ" }
// => theme == { Bar : { img : "BAZ" } }

result[ definition ].data = theme[ sprite ];
// => result == { Foo : {
//                  data : { img : "BAZ" }
//                }
//              }

result[ definition ].img  = theme[ sprite ].img;
// => result == { Foo : {
//                  data : { img : "BAZ" },
//                  img  : "BAZ"
//                }
//              }

delete result[ definition ].data.img;

console.log( result.[ definition ].data.img );
// => undefined


console.log( theme[ sprite ].img );
// => undefined

console.log( result[ definition ].img
// => "BAZ"