4 个回答

因为浏览器优化
像java这种静态语言 a.x 只要 记住 x 前面的 属性 需要多少 位,x 自己是什么,需要占多少位就可以,这样的话 汇编代码很短,运行就很快
js a.x 在x 内部需要保存 自己 是 字符串还是数组,对象还是 数字,以及 自己在内存中位置,这样就很慢
所以 v8那些大佬,就想办法啊,为了保持速度,ES6提倡保持对象的静态性,他们生成 隐藏类,但是如果你改变了 某个 类属性的 类型,字符串变数组,浏览器又要从新生成另一个隐藏类,这更慢
所以 推荐 typescript 这类语言
具体还是要参考 v8为啥那么快

ES6并没有推荐写法这一说,这是该文作者的推荐。

实际上这跟Immutable有关,即一个对象是否是可变的。

性能是间接带来的好处,更直接的好处是使得变量的变化可以预测,也更直观等。

具体可以参考这篇文章Immutable Data Structures and JavaScript

一些 JS 引擎比如 v8 会对同个 shape 的对象进行优化,增删属性会改变 shape 从而取消优化。(v8 优化了删除最后一个(添加的)属性)

还有看见你 tag 了 React,在 React 中这么做更多是考虑 immutability ,方便 React 判断对象改变了没有。Redux 这样的库更要求这么做来保持 state 的纯净。

既然是人家的推荐,就接受喽,这本质上是对语言的一种优化,ES6提倡保持对象的静态性,而Object.assign()可以完成对象的深度复制,很好地保证了对象的静态性。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题