如您所知,我们使用解构来使用ES6对象中的值。我想知道它的深度。
当我写下面的代码时:
let (or const) { firstVar, secondVar } = this.props
它是在内存中分配新空间还是像指针一样使用这些值?
过去,当我写作
let { options } = this.props
options.splice(0,20)
我注意到道具中的变量已经改变了,虽然我的编译器有错误,例如道具是Readonly'在不同的情况下。怎么可能呢?
答案 0 :(得分:5)
let
和const
声明了新变量,是的。它们在赋值/初始化后独立于object属性。
当我写
let { options } = this.props; options.splice(0,20)
时,我注意到道具中的变量已经改变了
是的,那是因为你的选项是一个数组,变量和object属性都指向同一个可变数组实例。 Assignment did not copy its contents
答案 1 :(得分:2)
destructuring 和 splice 之间存在混淆。
在第二个示例中,options
将成为this.props
对象的关键字;当您打印options
时,将使用原始this.props.options
对象。
所以它是一个参考;就你所说的那样,它是一个指向另一个变量的变量。
但是,您也在使用splice
这是一种具有副作用的就地/破坏性操作。
slice
会返回一个新数组, splice
会修改现有数组。
如果您想单独离开this.props.options
,则需要使用slice
:
let { options } = this.props
options.slice(0, 20) // does not modify the existing array, returns a new array
options.splice(0,20) // modifies the existing array, returns the array of deleted items;