Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我必须在Javascript中初始化对象的每个级别吗?_Javascript - Fatal编程技术网

我必须在Javascript中初始化对象的每个级别吗?

我必须在Javascript中初始化对象的每个级别吗?,javascript,Javascript,我不太擅长使用Javascript,因此我想知道是否有更好的方法: if (games[level] === undefined) { games[level] = {}; games[level]['pending'] = {}; } if (!games[level]['pending'].length) { return game.create(level); } 在PHP中,我可以测试空($games[$level]['pending'])。有没有更好的测试方

我不太擅长使用Javascript,因此我想知道是否有更好的方法:

if (games[level] === undefined) {
    games[level] = {};
    games[level]['pending'] = {};
}

if (!games[level]['pending'].length) {
    return game.create(level);
}

在PHP中,我可以测试空($games[$level]['pending'])。有没有更好的测试方法?基本上我想做的就是创建一个不存在的对象。

你可以自己做一个函数来做,把游戏对象传递给它一个类似“level.pending.id.something.something”的字符串,然后继续创建对象

function makeObj(obj, path) {
    var parts = path.split("."), tmp = obj, name;
    while (parts.length) { 
        name = parts.shift();
        if (typeof tmp[name] === 'undefined') {
              tmp[name] = {};
        }
        tmp = tmp[name];
    }
}

var x = {};
makeObj(x, "this.is.a.test");
如果没有这样的关卡,应该调用create来初始化所有需要的数据。我看不出把它变成一个对象然后检查“待定”有什么意义。它将始终为空,因为您刚刚创建了对象

如果你的第二个If为
游戏[level]['pending']]返回了一些内容。length
你的代码有一个大问题。你不能创建一个空对象(games[level]['pending']={}),然后发现它已经有属性了

此外:

games[level] = {};
// games[level]['pending'] = {}; - bad
games[level].pending = {}; // this way object properties should be used

即使在检查
未定义的属性时,也总会出现
类型错误
,因此您需要这样做。然而,我不知道有什么窍门可以让这更容易。是的,我是通过艰难的方式发现的。只是希望有一些“大师”能让它更优雅一些。基本上,我想做的是向挂起(等待开始游戏)对象添加一个新项目。在代码游戏[关卡].挂起中,它可能已设置(因此未定义的将不会被触发),但其中没有项目。因此进行了长度检查。
if (games[level] === undefined) {
    games[level] = game.create(level);
}
games[level] = {};
// games[level]['pending'] = {}; - bad
games[level].pending = {}; // this way object properties should be used