Javascript对象属性-如果不存在,则创建属性

Javascript对象属性-如果不存在,则创建属性,javascript,if-statement,null,try-catch,Javascript,If Statement,Null,Try Catch,我试图以最优雅的方式执行这段代码: if (internalTableName in self.columnMap && internalColumnName in self.columnMap[internalTableName]) { console.error('dupelicates'); } else { try { self.columnMap[internalTableName][internalColumnName] = l

我试图以最优雅的方式执行这段代码:

if (internalTableName in self.columnMap &&
    internalColumnName in self.columnMap[internalTableName]) {
    console.error('dupelicates');
}
else {
    try {
        self.columnMap[internalTableName][internalColumnName] = logicalColumnName;
    } catch (err) {
        self.columnMap[internalTableName] = {};
        self.columnMap[internalTableName][internalColumnName] = logicalColumnName;
    }
}
我可以将try/catch块转到:

if (internalTableName in self.columnMap &&
    internalColumnName in self.columnMap[internalTableName]) {
    console.error('dupelicates');
}
else {
    if (internalTableName in self.columnMap) {
        self.columnMap[internalTableName][internalColumnName] = logicalColumnName;
    }
    else {
        self.columnMap[internalTableName] = {};
        self.columnMap[internalTableName][internalColumnName] = logicalColumnName;

    }
}
我想知道Javascript是否提供了一些用于检查空性的操作符,这可以使这个逻辑以更优雅的方式编写,并且减少if子句


谢谢

常见的模式是使用:


我想你要找的是

if (!(internalTableName in self.columnMap))
    self.columnMap[internalTableName] = {};
if (!(internalColumnName in self.columnMap[internalTableName]))
    self.columnMap[internalTableName][internalColumnName] = logicalColumnName;
else
    console.error('duplicates');
您可以使用一个helper变量并通过简单的falsyness检查空属性来缩短它:

var table = self.columnMap[internalTableName] || (self.columnMap[internalTableName] = {});
if (!table[internalColumnName])
    table[internalColumnName] = logicalColumnName;
else
    console.error('duplicates');

@torazaburo我不认为这是一个骗局,因为这个问题是关于设置,而不是关于获取深度属性。对于已经存在的属性,它需要一个特例。
var table = self.columnMap[internalTableName] || (self.columnMap[internalTableName] = {});
if (!table[internalColumnName])
    table[internalColumnName] = logicalColumnName;
else
    console.error('duplicates');