我可以拥有没有值的JavaScript对象键

时间:2016-03-02 18:02:13

标签: javascript

我想在JavaScript对象中存储类似TaskPaper的任务。假设我有一个像

这样的任务
- 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过滤任务,并且使用true / false值不适用于我的工作流程。

SO社区将推荐什么作为最佳做法。

2 个答案:

答案 0 :(得分:2)

如果您执行if (myobj.flagged)之类的操作,那么如果flagged的值为true,则测试通过。如果flagged属性不存在,则会获得 falsy undefined。因此,它适用于flagged:trueflagged:false甚至没有flagged属性。所以使用true,并且当它不应该存在时完全省略该属性(因此for...in将在那种情况下起作用)。

答案 1 :(得分:1)

JSON规范不允许您在没有某些值的对象中创建密钥,并且没有“undefined”(you can see here的定义,关键字为null,{{ 1}}和true)。如果您正在寻找一个简单的标志值,那么您的替代方法可能是:

false

你的另一种选择可能是:

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

现在,可以说,在 JavaScript 中,您可以更具表现力。例如:

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