我可以拥有一个没有值的JavaScript对象键吗
问题描述:
我想将类似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"}
被举报不需要值和所有我能想到的是使用true
或null
我想稍后使用if key in object
过滤任务,并且具有真/假值不适用于我的工作流程。
SO社区推荐什么作为最佳实践。
答
如果你做的事情类似if (myobj.flagged)
,那么如果你的flagged
的值是true
,测试通过。如果flagged
属性不存在,那么你得到undefined
这就是falsy。所以它适用于flagged:true
,flagged:false
甚至没有flagged
财产。因此,使用true
,并且当它不应该在那里时完全忽略该属性(因此for...in
在这种情况下会起作用)。
答
的JSON规范不会让你创建一个对象的一个关键部分没有价值,没有的“不确定”的定义(you can see here的关键字是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
省略属性以指示它不存在或不可用是完全可接受的方法。这不是“没有价值的钥匙”;这是“缺少钥匙”。 – 2016-03-02 18:07:37
通过规范JSON,每个键都必须有一个值。你为什么避免真假?如果你想要它很短,你可以使用“f”:0/1。或者在分发JSON时使用压缩。 –
@torazaburo这是什么样子? –