使用集合时,我想知道最佳实践是什么:不定义属性(当属性缺失时)或将其定义为 false。
例子:
第一种情况:
[
{"age":42}, // first item
{} // second item, age is undefined
]
第二种情况:
[
{"age":42}, // first item
{"age":false} // second item, age is explicitly set to false
]
然后将此集合与 MongoDB 或 AngularJS 重复或其他任何内容一起使用,我可能会执行以下操作:
if (item.age){ doSomething();}
两个选项都正确。
我个人会说第一个案例很有趣,因为如果我们没有信息,我们不会指定它但是找到丢失的属性是否有成本、缺陷或风险?
最佳答案
...but is there a cost, flaw or risk for finding a missing property ?
没有任何意义,没有。从技术上讲,当你查找一个不在对象上的属性时,JavaScript 引擎必须接着检查对象的原型(prototype)(及其原型(prototype)等),这在理论上会慢一点(理论和现实可能不同),但原型(prototype)链必须深,否则您必须在紧迫的时间敏感循环中为数十万个对象执行此操作,这才重要——如果那样的话。
如果离开该属性真的让您感到困扰,而不是 false
,您可以考虑 undefined
或 null
。它们也是虚假的,但(在我看来,无论如何)它们暗示的更少。请注意,如果您在应用中的某处使用 JSON,则 JSON 没有 undefined
。
记住公理:“不要过早优化”。这在 JavaScript 世界中尤其适用,因为在一个 JavaScript 引擎上运行速度更快的东西可能会使另一个引擎运行得更慢。因此,几乎所有 JavaScript 性能问题的答案都是:测试并查看。
Here's a test在直接派生自 Object.prototype
的对象上;三种主要浏览器的结果:
Here's another test ,测试 20 层深的原型(prototype)层次结构的非常不现实的情况:
关于属性访问的 Javascript 性能 : undefined vs false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27244410/