属性访问的 Javascript 性能 : undefined vs false

标签 javascript performance properties undefined

使用集合时,我想知道最佳实践是什么:不定义属性(当属性缺失时)或将其定义为 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,您可以考虑 undefinednull。它们也是虚假的,但(在我看来,无论如何)它们暗示的更少。请注意,如果您在应用中的某处使用 JSON,则 JSON 没有 undefined

记住公理:“不要过早优化”。这在 JavaScript 世界中尤其适用,因为在一个 JavaScript 引擎上运行速度更快的东西可能会使另一个引擎运行得更慢。因此,几乎所有 JavaScript 性能问题的答案都是:测试并查看。

Here's a test在直接派生自 Object.prototype 的对象上;三种主要浏览器的结果:

enter image description here

Here's another test ,测试 20 层深的原型(prototype)层次结构的非常不现实的情况:

enter image description here

关于属性访问的 Javascript 性能 : undefined vs false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27244410/

相关文章:

java - 暂时减慢处理速度

objective-c - Objective-C : Atomic decrement of integer without @synchronized?

java - .properties 文件中的条件语句

c# - ViewModel 中的可绑定(bind)字段

javascript - 在Javascript中获取数组中每个字符串的第一个字符

javascript - 在 jquery 中检查某些输入类型文件是否为空的更好方法?

performance - n元数组中未知元素的时间复杂度

sql-server - 您将如何优化此 SQL Server 2008 R2 表

javascript - 我如何模拟 AngularJS 单元测试中 promise 的结果?

javascript - 如何从其他地方的脚本调用 Angular Controller 上的函数?