我可以有一个没有值的JavaScript对象键吗
我想在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 我想稍后使用筛选任务,如果输入对象,并且具有真/假值将不
- 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”:“…”
。