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

Can I have a JavaScript object key without a value

本文关键字:对象 JavaScript 有一个 我可以      更新时间:2023-09-26

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

- 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过滤任务,并且具有真/假值不适用于我的工作流程。

SO 社区会推荐哪些最佳实践。

如果你做类似 if (myobj.flagged) 的操作,那么如果你的 flagged 值是 true ,则测试通过。如果flagged属性不存在,那么你会得到undefined这是假的。所以它适用于flagged:trueflagged:false甚至没有flagged属性。所以使用 true ,并在不应该存在时完全省略该属性(因此在这种情况下for...in可以工作)。

JSON 规范不允许你在没有一些值的对象中创建键,并且没有"undefined"的定义(你可以在这里看到关键字是 nulltruefalse )。如果您正在寻找一个简单的标志值,那么您的替代方法可能是:

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