这个JavaScript是什么意思?

What does this JavaScript mean?

本文关键字:意思 是什么 JavaScript 这个      更新时间:2023-09-26

我正在开发一个遗留应用程序,所有的JS对我来说都很神秘。
这里有几行神秘的台词,我不知道它们在做什么。

var i2b2 = {sdx:{TypeControllers:{},Master:{_sysData:{}}},events:{},hive:{cfg:{},helpers:{},base_classes:{}},h:{}};  
if (undefined==i2b2.hive) { i2b2.hive = {}; }     
i2b2.hive.tempCellsList = [
        { code: "PM",
          forceLoading: true 
        },
        { code: "ONT"   },
        { code: "CRC"   },
        { code: "WORK"},
        { code: "SHRINE"},
        { code: "PLUGINMGR",
           forceLoading: true,
           forceConfigMsg: { params: [] }
        }
    ];

有更多的varif语句,但它们对不同的变量做同样的事情。
请帮我解开这个谜团。

第一行使用嵌套对象字量初始化i2b2

var obj = {};var obj = new Object();的简写

一个简单的对象字面值将是

var simpleObject = {
    property1: "Hello",
    property2: "MmmMMm",
    property3: ["mmm", 2, 3, 6, "kkk"],
    method1: function() {
        alert("my method")
    }
};

嵌套的

var rectangle = {
    upperLeft: {
        x: 2,
        y: 2
    },
    lowerRight: {
        x: 4,
        y: 4
    }
};

你的是经典。

var i2b2 = {
    sdx: {
        TypeControllers: {},
        Master: {
            _sysData: {}
        }
    },
    events: {},
    hive: {
        cfg: {},
        helpers: {},
        base_classes: {}
    },
    h: {}
};

第二行是IMHO

i2b2.hive = i2b2.hive || {};

如果hive是undefined,创建一个新对象

最后一行为对象hive创建了一个属性tempCellsList。(请注意,hivei2b2的属性)最后,一个新的对象数组被添加到属性tempCellsList

这段javascript代码创建了一个名为ib2b的变量,它有许多属性:sdxeventshive等。这些属性包含更多的复合对象,它们将在下面构造。

这个想法是,这个全局对象可以从其他javascript代码中引用,它为客户端应用程序存储全局配置。

我不太确定,你到底不明白什么。上面的代码有两个"奇怪"的地方,我将试着解释一下,但如果这还不够,你需要更好地描述你不理解的地方:

  1. 代码检查i2b2.hive是否未定义,如果未定义,则将其设置为空对象。由于属性显然是在前一行设置的,我的猜测是,这段代码是动态生成的,一些逻辑(如这个检查)是在JavaScript代码中定义的,即使它可以(应该?)是服务器端代码。

  2. undefined==i2b2.hive是一个坏的/错误的方式来测试"未定义",因为undefined不是一个保留字在JavaScript。这是可行的,因为undefined只是一个变量,碰巧是未定义的。应该使用if (typeof i2b2.hive == "undefined") ...,或者只使用if (i2b2.hive) ...

它似乎在i2b2对象中设置了一些参数。它本身不"做"任何事情,但它似乎为进一步执行设置了一些基本配置设置。试着在下面的代码中查找类似的情况。

E。g设置i2b2.hive.tempCellList[5].forceLoadingtrue。之后的应用程序可能具有if条件,例如

for(var i in i2b2.hive.tempCellList)
{
    if(i2b2.hive.tempCellList[i].forceLoading === true)
    {
        // do something...
    }
}