我想在JavaScript对象中存储类似TaskPaper的任务。假设我有一个像
这样的任务- Post to StackOverflow @priority(2) @due(2016-05-03) @flagged
这会变成
{"name":"Post to StackOverflow", "priority": 2, "due":"2016-05-03", "flagged":"value"}
已标记不需要值,我能想到的只是使用true
或null
我希望稍后使用if key in object
过滤任务,并且使用true / false值不适用于我的工作流程。
SO社区将推荐什么作为最佳做法。
答案 0 :(得分:2)
如果您执行if (myobj.flagged)
之类的操作,那么如果flagged
的值为true
,则测试通过。如果flagged
属性不存在,则会获得 falsy 的undefined
。因此,它适用于flagged:true
,flagged: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