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

时间:2014-12-02 07:56:44

标签: 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();}

两个选项都是正确的。

我个人会说第一个案例很有意思,因为如果我们没有我们没有指定的信息但是找到遗失的财产会有成本,缺陷或风险吗?

2 个答案:

答案 0 :(得分:3)

  

...但找到遗失财产是否有成本,缺陷或风险?

没有任何意义,没有。从技术上讲,当你查找一个不在对象上的属性时,JavaScript引擎必须检查对象的原型(及其原型等),这在理论上有点慢(理论和现实可能不同) ),但原型链必须,否则你必须在紧密的时间敏感循环中为成千上万的对象做这件事,因为它很重要 - 如果那样的话。

如果您真的不喜欢离开酒店,而不是false,您可能会考虑undefinednull。他们也是假的,但(我认为,无论如何)他们意味着更少。请注意,如果您在应用中的某个位置使用JSON,则JSON没有undefined

记住公理:“不要过早优化。”这在JavaScript世界中特别适合,因为在一个JavaScript引擎上使某些东西更快的东西可以使它在另一个JavaScript引擎上更慢。因此,任何JavaScript性能问题的答案都是:测试并查看。

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

enter image description here

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

enter image description here

答案 1 :(得分:0)

它包括您的表现需求。如果要优化数据存储,则应减小数据大小。如果脚本编写时间更重要,正确的方法是将false设置为默认值。但第二种方式可以提供错误日志隐藏的错误。所以你可能在调试时遇到问题。