我编写了以下JavaScript:
var myArray = ['a', 'b', 'c'];
var copyOfMyArray = myArray;
copyOfMyArray.splice(0, 1);
alert(myArray); // alerts ['b','c']
alert(copyOfMyArray); // alerts ['b','c']
var myNumber = 5;
var copyOfMyNumber = myNumber;
copyOfMyNumber = copyOfMyNumber - 1;
alert(myNumber); // alerts 5
alert(copyOfMyNumber); // alerts 4
此代码声明一个变量myArray
并将其设置为数组值。然后,它声明第二个变量copyOfMyArray
并将其设置为myArray
。它对进行操作copyOfMyArray
,然后向myArray
和发出警报copyOfMyArray
。不知何故,当我对执行操作时copyOfMyArray
,似乎对执行了相同的操作myArray
。
然后,代码对数字值执行相同的操作:声明一个变量myNumber
并将其设置为数字值。然后,它声明第二个变量copyOfMyNumber
并将其设置为myNumber
。它对进行操作copyOfMyNumber
,然后向myNumber
和发出警报copyOfMyNumber
。在这里,我得到预期的行为:对不同的价值观myNumber
和copyOfMyNumber
。
数组与JavaScript中的数字有什么区别,似乎更改数组会更改该数组副本的值,而更改数字不会更改该数字副本的值吗?
我猜测由于某种原因,数组是通过引用引用的,而数字是通过值引用的,但是为什么呢?我如何知道其他对象会有什么行为?
JavaScript中的数组也是一个 对象 ,变量仅包含 对 对象的 引用 ,而不是html" target="_blank">对象本身。因此,两个变量都引用 同一 对象。
您与数字示例的比较是不正确的。您将新值分配给copyOfMyNumber
。如果您为其分配新值,copyOfMyArray
则也不会更改myArray
。
您可以使用slice
docs创建数组的副本:
var copyOfMyArray = myArray.slice(0);
但是请注意,这只会返回浅表副本,即不会克隆数组中的对象。
考虑: 为什么改变的值会改变的值?
问题内容: 我在变量范围方面遇到麻烦。 我期望输出到,但结果是。为什么我在方法中更改了数组中的值,但是原来的数组却更改了? 问题答案: Java中的数组是一个对象。当您通过创建数组时,它是在堆上创建的,并且返回一个参考值(类似于C中的指针)并将其分配给您的变量。 在C语言中,这表示为: 当您将该变量传递给方法时,您将传递给该方法中的局部(堆栈)变量分配(复制)的参考值。不会复制数组的内容,仅复制参
我在使用Ruby数组时遇到了一些意外的行为: 终端输出: 第一个问题:为什么array1和array2中的项目不同,尽管只在array3上迭代?连接两个数组会返回一个新数组,那么为什么array1和array2会有延迟效应呢? 第二个问题:如何通过迭代来更改array3中的项目,而不更改项目array1或array2? 第三个问题:当使用. map和. each代替. map!时,输出是相同的。所
我正在尝试这样的事情: 父组件 编辑用户体验。vue 当我尝试更改中的数据时,它会自动更改中的数据。 有什么意义?
问题内容: 我对map()的行为感到困惑。 我有一个这样的对象数组: 我将此数组传递给应该返回相同数组但所有产品均免费的函数: 函数是: 它返回以下数组: 所以我重写了我的职能是: 它将按预期返回数组。 但是!在那一刻,我放松了主意,在这两种情况下,我都修改了原始产品阵列。 有关map()的文档说不应这样做(https://developer.mozilla.org/en- US/docs/Web
我有一个包含复杂条目的数组列表的结构,我想将它们转换为浮点数。虚部可以丢弃,这很好。 我想知道,为什么这不起作用,而另一方面,在创建列表“数组”之前将类型更改为float会起作用。 这是一个非常基本的问题,但如果有人能分享他或她的想法,我将非常高兴。 感谢提前:)