我可以有一个没有值的JavaScript对象键吗

我可以有一个没有值的JavaScript对象键吗,javascript,json,Javascript,Json,我想在JavaScript对象中存储类似于任务纸的任务。假设我有这样的任务 - Post to StackOverflow @priority(2) @due(2016-05-03) @flagged 这将变成 {"name":"Post to StackOverflow", "priority": 2, "due":"2016-05-03", "flagged":"value"} 标记不需要值,我所能想到的就是使用true或null 我想稍后使用筛选任务,如果输入对象,并且具有真/假值将不

我想在JavaScript对象中存储类似于任务纸的任务。假设我有这样的任务

- Post to StackOverflow @priority(2) @due(2016-05-03) @flagged
这将变成

{"name":"Post to StackOverflow", "priority": 2, "due":"2016-05-03", "flagged":"value"}
标记不需要值,我所能想到的就是使用
true
null

我想稍后使用
筛选任务,如果输入对象
,并且具有真/假值将不适用于我的工作流


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

如果您执行类似于
If(myobj.flagged)
的操作,那么如果您的
flagged
值为
true
,则测试通过。如果
标记的
属性不存在,则会得到
未定义的
,这是错误的。因此它适用于
标记的:true
标记的:false
,甚至不使用
标记的
属性。因此,请使用
true
,并在属性不应该存在时完全忽略该属性(因此
for…in
在这种情况下可以工作)

JSON规范不允许在没有某些值的对象中创建键,并且没有“未定义”的定义(关键字是
null
true
、和
false
)。如果您正在寻找一个简单的标志值,那么您的替代方法可以是:

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

省略一个属性来表示它不存在或不可用是完全可以接受的方法。这不是“没有值的键”;根据JSON的规范,每个键都必须有一个值。你为什么要回避真/假?如果希望它简短,可以使用“f”:0/1。或者在分发JSON时使用压缩。@torazaburo这看起来像什么?@IvanKuckir True/False让我觉得很混乱,尤其是当值为False时,密钥不存在时。我永远不会有“false”值。我的意思是,只需省略属性,如
{“name”:“…”,“priority”:2,“due”:“…”