我正在使用一个滑块构建器,它有大约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
}
}
我只是在努力缩短我的代码,因为我在处理它并消除那些不需要的东西。
答案 0 :(得分:2)
在你的例子中:
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
,但不会参考