我正在寻找一种检查密钥是否存在以及是否不创建密钥的单行方式.
var myObject = {};
//Anyway to do the following in a simpler fashion?
if (!('myKey' in myObject))
{
myObject['myKey'] = {};
}
Run Code Online (Sandbox Code Playgroud)
und*_*ned 23
短路评估:
!('myKey' in myObject) && (myObject.myKey = {})
Run Code Online (Sandbox Code Playgroud)
Mou*_*faS 11
myObject['myKey'] = myObject['myKey'] || {};
Run Code Online (Sandbox Code Playgroud)
小智 9
您可以使用逻辑空赋值 (??=)
var test = {};
(test.hello ??= {}).world ??= "Hello doesn't exist!";
Run Code Online (Sandbox Code Playgroud)
评论:我通常更喜欢@Nindaff和@MoustafaS提供的答案,具体取决于具体情况.
为了完整性,您可以使用Object.assign任何不存在的键创建键/值.当您具有要使用的默认选项/设置时,这非常有用,但允许用户通过参数覆盖.它看起来像这样:
var myObject = {};
myObject = Object.assign( { 'myKey':{} }, myObject );
Run Code Online (Sandbox Code Playgroud)
这是同样的东西,输出更多:
var obj = {};
console.log( 'initialized:', obj);
obj = Object.assign( {'foo':'one'}, obj );
console.log( 'foo did not exist:', obj );
obj = Object.assign( {'foo':'two'}, obj );
console.log( 'foo already exists:', obj );
delete obj.foo;
obj = Object.assign( {'foo':'two'}, obj );
console.log( 'foo did not exist:', obj );Run Code Online (Sandbox Code Playgroud)
注意:IE中没有Object.assign,但有一个Polyfill