【发布时间】:2019-10-30 10:38:14
【问题描述】:
我不明白为什么将数组分配给新值不会影响新数组。 我知道“推”会修改原始数组,也可以拼接,而过滤器或切片不会,这不是我的问题。我的问题是为什么分配不。 我查看了旧问题的答案,说它是通过引用传递的,但是如果它是通过引用传递的,那么更改它的值也应该会影响引用。
const modify = (someArray) => {
// modified my array
someArray.push(1)
// modified my original array
someArray[0] = 'A'
// didn't modify my array and I want to know why.
someArray = ['whatever']
}
let myArray = ['a', 'b']
modify(myArray)
console.log(myArray) // ["A", "b", 1]
【问题讨论】:
-
我的两个对象(数组)引用内存中的同一个对象,这意味着每当我们修改其中一个对象时,另一个对象也将被修改。这并不意味着我们何时将其中一个重新分配到一个新值,第二个将改变。
-
所以我们不能重新分配?
-
someArray和myArray是两个不同的变量,它们引用内存中的同一个对象。当您修改时,someArraymyArray也会被修改。但是当你重新分配它someArray = ['whatever']。然后它不会引用变量myArray。 -
变量是值的容器。有些值可以直接修改(对象是可变的),有些则不能(字符串是不可变的)。分配给变量总是用新值“交换”现有值。注意
someArray[0] = 'A'不为变量赋值。它读取变量,“提取”它包含的值并改变该值(更改数组的第一个元素)。
标签: javascript arrays ecmascript-6