javascript - 深层对象字面量的简写?

标签 javascript object

我正在使用一个 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/

相关文章:

javascript - 如何在保持格式的同时将此日期转换为字符串?

javascript - 在 WebStorm 中通过 Javascript 快速运行项目的快捷方式?

javascript - 在 jQuery 中从页面元素创建数组

java - 在 Java 中用 "<"或 ">"运算符比较两个对象

javascript - 如何在 Puppeteer 中单击带有文本的元素?

javascript - 无限滚动-圆柱页面(css/js)

Java:使用 >、< 和 == 比较对象

java - 在 Java 接口(interface)中重新定义等待方法

arrays - 为什么 Range#select 会产生一个 Array 对象?

javascript - 当用户在输入字段中按 Enter 时如何运行函数?