数组的索引与 length
拿下面这个例子来说,当通过数组索引访问元素的值时,已经能够建立响应联系了:
1 | const arr = reactive(['foo']) |
但是通过索引设置数组的元素值与设置对象的属性值仍然存在根本上的不同,这是因为数组对象部署的内部方法[[DefineOwnProperty]]
不同于常规对象。实际上,当我们通过索引设置数组元素的值时,会执行数组对象所部署的内部方法[[Set]]
,这一步与设置常规对象的属性值一样。根据规范可知,内部方法[[Set]]
其实依赖于[[DefineOwnProperty]]
,到了这里就体现出了差异。数组对象所部署的内部方法[[DefineOwnProperty]]
的逻辑定义在规范的 10.4.2.1 节。