我正在使用一个 slider 构建器,它有大约 10 个级别的对象和数组来存储所有数据。前 4 个级别几乎总是结构相同,但位于不同的数组中。例如:
Slides[thisSlide].layers[thisLayer].animationgroup[thisAnimationId].sequence[currentSegment].duration
在任何给定时间我可能都在同一张幻灯片、同一层上工作,所以我想我可以声明一些变量,例如:
var currentSlide = 0;
var currentLayer = 0;
var currentChild = "0";
var currentKeyframe = "";
Slides.push({
"background-color": "#aaaaaa",
"canvasHeight": "200",
"canvasWidth": "1000",
"layers": []
});
var CSL = Slides[currentSlide].layers[currentLayer];
var CAG = Slides[thisSlide].layers[thisLayer].animationgroup[thisAnimationId];
在应用程序的开头,然后可以用这种方式速记第一个示例:
CAG.sequence[currentSegment].duration;
它没有像我预期的那样工作。后来当我尝试使用它时,我收到一个提示,说 CSL 没有定义,但它应该在全局范围内:
function updateStuff(){
for (i = 0; i < CSL.length; i++) {
//do something
}
}
我只是想在编写代码时稍微缩短一下代码,并消除那些实际上不需要的东西。
最佳答案
在您的示例中:
var currentSlide = 0;
var currentLayer = 0;
var currentChild = "0";
var currentKeyframe = "";
Slides.push({
"background-color": "#aaaaaa",
"canvasHeight": "200",
"canvasWidth": "1000",
"layers": []
});
var CSL = Slides[currentSlide].layers[currentLayer];
看起来 layers
数组为空,因此在这种情况下,对 layers
数组进行索引将返回 undefined 到 CSL
。
请注意,如果当时定义了一个对象,您确实会获得对该对象的引用,但如果没有定义任何内容,则 CSL
会被分配“值类型”undefined
没有引用。
关于javascript - 深层对象字面量的简写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42399269/