2016-03-02 99 views
2

我想将类似TaskPaper的任务存储在JavaScript对象中。假设我有一个像我可以拥有一个没有值的JavaScript对象键吗

- Post to StackOverflow @priority(2) @due(2016-05-03) @flagged 

一个任务时,这会变成

{"name":"Post to StackOverflow", "priority": 2, "due":"2016-05-03", "flagged":"value"} 

被举报不需要值和所有我能想到的是使用truenull

我想稍后使用if key in object过滤任务,并且具有真/假值不适用于我的工作流程。

SO社区推荐什么作为最佳实践。

+1

省略属性以指示它不存在或不可用是完全可接受的方法。这不是“没有价值的钥匙”;这是“缺少钥匙”。 – 2016-03-02 18:07:37

+0

通过规范JSON,每个键都必须有一个值。你为什么避免真假?如果你想要它很短,你可以使用“f”:0/1。或者在分发JSON时使用压缩。 –

+0

@torazaburo这是什么样子? –

回答

2

如果你做的事情类似if (myobj.flagged),那么如果你的flagged的值是true,测试通过。如果flagged属性不存在,那么你得到undefined这就是falsy。所以它适用于flagged:true,flagged:false甚至没有flagged财产。因此,使用true,并且当它不应该在那里时完全忽略该属性(因此for...in在这种情况下会起作用)。

1

的JSON规范不会让你创建一个对象的一个​​关键部分没有价值,没有的“不确定”的定义(you can see here的关键字是nulltruefalse)。如果你正在寻找一个简单的标志值,那么你的另一种方法可以是:

if(object.key) // this would mean that the object has "key" and it is set 
       // to a truthy value. 

你的其他替代可能是这样的:

if(key in object && object[key]) // Verifies key exists and has truthy value 

现在,他这样说,在的JavaScript,你可以多一点表现力。例如:

> var k; 
undefined 
> var o = {k:k} 
undefined 
> o 
Object {k: undefined} 
> console.log('k' in o) 
true 
相关问题