ES6并没有推荐写法这一说,这是该文作者的推荐。
实际上这跟Immutable有关,即一个对象是否是可变的。
性能是间接带来的好处,更直接的好处是使得变量的变化可以预测,也更直观等。
具体可以参考这篇文章Immutable Data Structures and JavaScript
一些 JS 引擎比如 v8 会对同个 shape 的对象进行优化,增删属性会改变 shape 从而取消优化。(v8 优化了删除最后一个(添加的)属性)
还有看见你 tag 了 React,在 React 中这么做更多是考虑 immutability ,方便 React 判断对象改变了没有。Redux 这样的库更要求这么做来保持 state 的纯净。
13 回答13.1k 阅读
7 回答2.3k 阅读
3 回答1.4k 阅读✓ 已解决
6 回答1.5k 阅读✓ 已解决
2 回答1.5k 阅读✓ 已解决
3 回答1.5k 阅读✓ 已解决
4 回答1.8k 阅读
因为浏览器优化
像java这种静态语言 a.x 只要 记住 x 前面的 属性 需要多少 位,x 自己是什么,需要占多少位就可以,这样的话 汇编代码很短,运行就很快
js a.x 在x 内部需要保存 自己 是 字符串还是数组,对象还是 数字,以及 自己在内存中位置,这样就很慢
所以 v8那些大佬,就想办法啊,为了保持速度,ES6提倡保持对象的静态性,他们生成 隐藏类,但是如果你改变了 某个 类属性的 类型,字符串变数组,浏览器又要从新生成另一个隐藏类,这更慢
所以 推荐 typescript 这类语言
具体还是要参考 v8为啥那么快