[英]How is it best to add properties to an object literal in JS?
我在学习 JS 时遇到了两种向对象字面量添加属性的方法。 第一个很简单: let person ={name:"Ben", age:5}
。 第二种方式是let person ={}; person.name="Ben"; person.age=5
let person ={}; person.name="Ben"; person.age=5
let person ={}; person.name="Ben"; person.age=5
。 问题是第二种添加新属性的方法是否可以接受,它是否存在一些性能问题?
第二种方法可以是V8非常轻微低效的,至少,由于其使用的隐藏类。
每次向对象添加新属性时,对象的旧隐藏类都会更新为新隐藏类的过渡路径。
使用第二种方法,您有:
空虚的person
然后添加.name
属性: person
的隐藏类从空变为有name
(如果它不存在,则由引擎创建)
然后你添加age
属性:隐藏的person
类再次切换,从有name
到有name
和age
。
相比之下,使用第一种方法,编译器可以立即看到person
对象将始终以两个属性开始: name
和age
,而不必每次添加属性时都切换到新的隐藏类。
在实例化后向对象添加属性将强制隐藏类更改并减慢为先前隐藏类优化的任何方法。
也就是说 - 除非这种事情是在一个非常紧凑的循环中完成的,否则性能影响几乎肯定是完全不明显的。 毕竟,计算机每秒可以进行数百万次计算。 如果您运行性能测试并注意到您的代码的一部分占用了太多资源,则最好编写干净、可读的代码,并且仅针对性能进行优化。
(但是,即使如此,IMO 一次性声明所有对象可能更可取-避免不必要的突变时代码更易于阅读和理解)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.