首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么在数组内移位数组会影响复制的(不是通过引用)数组,而移位整个初始数组不会?(Javascript)

在JavaScript中,数组是引用类型的数据结构。当我们将一个数组赋值给另一个变量时,实际上是将数组的引用地址赋给了新的变量,而不是将数组的值复制一份给新的变量。

当我们对原始数组进行移位操作时,例如使用shift()方法移除数组的第一个元素,这会导致原始数组的长度减少,并且所有元素的索引都会减少1。由于新的数组变量仍然引用原始数组,因此在移位操作后,新的数组变量也会反映出这些变化。

然而,当我们将整个初始数组赋值给新的变量时,实际上是将原始数组的引用地址赋给了新的变量。这意味着新的变量和原始数组引用的是同一个数组对象。因此,无论我们对原始数组进行何种操作,新的变量都会反映出这些变化。

下面是一个示例代码来说明这个问题:

代码语言:txt
复制
// 初始化数组
var originalArray = [1, 2, 3, 4, 5];

// 将数组赋值给新的变量
var newArray = originalArray;

// 移除原始数组的第一个元素
originalArray.shift();

console.log(originalArray); // 输出: [2, 3, 4, 5]
console.log(newArray); // 输出: [2, 3, 4, 5]

在上面的示例中,当我们移除原始数组的第一个元素后,原始数组和新的数组变量都反映出了这个变化。这是因为它们引用的是同一个数组对象。

如果我们将整个初始数组赋值给新的变量,例如var newArray = originalArray;,无论我们对原始数组进行何种操作,新的变量都会反映出这些变化。例如,如果我们移除原始数组的第一个元素,新的变量也会受到影响。

总结起来,当我们对原始数组进行移位操作时,会改变原始数组的长度和元素的索引,因此通过引用的新数组变量也会反映出这些变化。而当我们将整个初始数组赋值给新的变量时,它们引用的是同一个数组对象,因此无论对原始数组进行何种操作,新的变量都会反映出这些变化。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

这些Java 代码必须要说一说优化细节!

10、当复制大量数据时,使用System.arraycopy命令 11、乘法和除法使用移位操作 例如: ?...12、循环不要不断创建对象引用 例如: ? 这种做法会导致内存中有count份Object对象引用存在,count很大的话,就耗费内存了,建议为改为: ?...16、尽量合适场合使用单例 使用单例可以减轻加载负担、缩短加载时间、提高加载效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面: (1)控制资源使用,通过线程同步来控制资源并发访问...变量所引用,那么gc通常是不会回收这个对象所占有的堆内存,如: ?...19、实现RandomAccess接口集合比如ArrayList,应当使用最普通for循环不是foreach循环来遍历 这是JDK推荐给用户

62330

必会 55 个 Java 性能优化细节!一网打尽!

使用中,如果超出这个大小,就会重新分配内存,创建一个更大数组,并将原先数组复制过来,再丢弃旧数组。...19、尽量早释放无用对象引用 大部分时,方法局部引用变量所引用对象随着方法结束变成垃圾,因此,大部分时候程序无需将局部,引用变量显式设为 null。 例如: Java 代码 ?...23、尽量使用 System.arraycopy () 代替通过来循环复制数组 System.arraycopy() 要比通过循环来复制数组多。...50、为 'Vectors' 和 'Hashtables' 定义初始大小 JVM 为 Vector 扩充大小时候需要重新创建一个更大数组,将原原先数组内容复制过来,最后,原先数组再被回收。...不管程序执行结果如何,finally 块总是执行,以确保资源正确关闭。 52、使用 'System.arraycopy ()' 代替通过来循环复制数组 例子: ? 更正: ?

2.8K10
  • Java高级开发必会50个性能优化细节(珍藏版)

    使用中,如果超出这个大小,就会重新分配内存,创建一个更大数组,并将原先数组复制过来,再丢弃旧数组。...尽量早释放无用对象引用 大部分时,方法局部引用变量所引用对象随着方法结束变成垃圾,因此,大部分时候程序无需将局部,引用变量显式设为null。 例如: Java代码 ?...尽量使用System.arraycopy ()代替通过来循环复制数组 System.arraycopy() 要比通过循环来复制数组多。 ● 24....● 二、为'Vectors' 和 'Hashtables'定义初始大小 JVM为Vector扩充大小时候需要重新创建一个更大数组,将原原先数组内容复制过来,最后,原先数组再被回收。...不管程序执行结果如何,finally块总是执行,以确保资源正确关闭。 ● 四、使用'System.arraycopy ()'代替通过来循环复制数组 例子: ? 更正: ?

    58440

    Java编程性能优化一些事儿

    使用中,如果超出这个大小,就会重新分配内存,创建一个更大数组,并将原先数组复制过来,再 丢弃旧数组。...尽量早释放无用对象引用 大部分时,方法局部引用变量所引用对象 随着方法结束变成垃圾,因此,大部分时候程序无需将局部,引用变量显式设为null。 例如: Java代码 ?...尽量使用System.arraycopy ()代替通过来循环复制数组 System.arraycopy() 要比通过循环来复制数组多 24....二、为’Vectors’ 和 ‘Hashtables’定义初始大小 JVM为Vector扩充大小时候需要重新创建一个更大数组,将原原先数组内容复制过来,最后,原先数组再被回收。...四、使用’System.arraycopy ()’代替通过来循环复制数组,例子: ? 更正: ?

    65300

    Java高级开发必会50个性能优化细节(珍藏版)

    使用中,如果超出这个大小,就会重新分配内存,创建一个更大数组,并将原先数组复制过来,再丢弃旧数组。...尽量早释放无用对象引用 大部分时,方法局部引用变量所引用对象随着方法结束变成垃圾,因此,大部分时候程序无需将局部,引用变量显式设为null。 例如: Java代码 ?...尽量使用System.arraycopy ()代替通过来循环复制数组 System.arraycopy() 要比通过循环来复制数组多。 ● 24....● 二、为'Vectors' 和 'Hashtables'定义初始大小 JVM为Vector扩充大小时候需要重新创建一个更大数组,将原原先数组内容复制过来,最后,原先数组再被回收。...不管程序执行结果如何,finally块总是执行,以确保资源正确关闭。 ● 四、使用'System.arraycopy ()'代替通过来循环复制数组 例子: ? 更正: ?

    1.3K30

    Java开发50条编码习惯,让你代码不在慢慢吐吐

    尽量早释放无用对象引用 大部分时,方法局部引用变量所引用对象随着方法结束变成垃圾,因此,大部分时候程序无需将局部,引用变量显式设为null。 例如: ?...尽量使用System.arraycopy ()代替通过来循环复制数组 System.arraycopy() 要比通过循环来复制数组多。 23....这里有个注意,给成员变量设置初始值但需要调用其他方法时候,最好放在一个方法。比如initXXX()中,因为直接调用某方法赋值可能因为类尚未初始抛空指针异常。如: ? 28....二、为Vectors 和 Hashtables定义初始大小 JVM为Vector扩充大小时候需要重新创建一个更大数组,将原原先数组内容复制过来,最后,原先数组再被回收。...四、使用'System.arraycopy ()'代替通过来循环复制数组 例子: ?

    91810

    你不知道,Java代码性能优化 40+ 细节,赶快收藏!

    合适场合使用单例 使用单例可以减轻加载负担,缩短加载时间,提高加载效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面: 控制资源使用,通过线程同步来控制资源并发访问;...使用中,如果超出这个大小,就会重新分配内存,创建一个更大数组,并将原先数组复制过来,再丢弃旧数组。...使用System.arraycopy ()代替通过来循环复制数组 System.arraycopy() 要比通过循环来复制数组多。...从技术上讲,你甚至可以随意地抛出异常,不用花费很大代价。招致性能损失不是 throw 操作——尽管没有预先创建异常情况下就抛出异常是有点不寻常。...比如initXXX()中,因为直接调用某方法赋值可能因为类尚未初始抛空指针异常,如:public int state = this.getState()。

    48200

    30个精简代码小技巧

    4.及时关闭流 java编程过程中,进行数据库连接,I/O流等操作时务必当心,使用完毕后,应及时关闭流以释放资源。因为这些大对象操作造成系统大开销,大大影响程序运行效率。...比如,一个字符数组大概要放5000个字符不指定长度,最接近50002次幂是4096,那么: (1) 4096基础上,申请8194+2个大小数组,加起来相当于共申请了12292内存空间,如果一开始就指定长度...(2) 把原来4096个字符拷贝到新字符数组中,这样不仅浪费内存又降低代码运行效率。 所以,给底层以数组实现集合、工具类设置一个合理初始值是不会有错。...16.尽量何时场合使用单例 使用单例可以减轻加载负担,缩短加载时时间,提高加载效率,但并不是所有的地方都适用于单例,简单说,单例主要适用于以下三个方面: 控制资源使用,通过线程同步来控制资源并发访问...)方法 本意是想打印数组内容,却可能因为数组引用对象为空导致空指针异常。

    64321

    详解九章算法作者是谁_arrayset

    具体实现过程是if代码块中,整体目标是使得输入数字二进制最高位及以后全为一,之后加1。结果必然只有最高位为1,其余全为0. 那么为什么恰好5次移位即可完成,我用递归来辅助大家理解。...因此,可以用递归来表达整个移位过程,默认不考虑0,输入n为移动次数,结果是不考虑位宽限制下最高位移动n次后1总数量。 当输入n为0时,不移动,最高位1不动,总共1个1。...通过式子可以发现,当n = 5时,可以使得从最高位1开始32位全为1.int只有32位,也就是说可以使得从最高位开始所有的位都为1....另外点是为什么使用head,不是tail,用head-1这个操作。 这需要讲到ArrayDeque架构。它有两个描述数组变量,head和tail。...ArrayDeque又不允许输入为null,这样数组为null槽为空槽,不为null槽即为使用槽 pollLast public E pollLast() { int t =

    32520

    Java性能优化50个细节

    尽量合适场合使用单例 使用单例可以减轻加载负担,缩短加载时间,提高加载效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面: 第一,控制资源使用,通过线程同步来控制资源并发访问...使用中,如果超出这个大小,就会重新分配内存,创建一个更大数组,并将原先数组复制过来,再丢弃旧数组。...尽量早释放无用对象引用 大部分时,方法局部引用变量所引用对象随着方法结束变成垃圾,因此,大部分时候程序无需将局部,引用变量显式设为null。...尽量使用System.arraycopy ()代替通过来循环复制数组 System.arraycopy() 要比通过循环来复制数组多。 24....从技术上讲,你甚至可以随意地抛出异常,不用花费很大代价。招致性能损失不是 throw 操作——尽管没有预先创建异常情况下就抛出异常是有点不寻常。

    29520

    Java性能优化50个细节,我必须分享给你!

    尽量合适场合使用单例 使用单例可以减轻加载负担,缩短加载时间,提高加载效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面: 第一,控制资源使用,通过线程同步来控制资源并发访问...使用中,如果超出这个大小,就会重新分配内存,创建一个更大数组,并将原先数组复制过来,再丢弃旧数组。...尽量早释放无用对象引用 大部分时,方法局部引用变量所引用对象随着方法结束变成垃圾,因此,大部分时候程序无需将局部,引用变量显式设为null。...尽量使用System.arraycopy ()代替通过来循环复制数组 System.arraycopy() 要比通过循环来复制数组多。 24....从技术上讲,你甚至可以随意地抛出异常,不用花费很大代价。 招致性能损失不是 throw 操作——尽管没有预先创建异常情况下就抛出异常是有点不寻常。

    38520

    Java 性能优化 45 个细节

    尽量合适场合使用单例 使用单例可以减轻加载负担,缩短加载时间,提高加载效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面: 控制资源使用,通过线程同步来控制资源并发访问...使用中,如果超出这个大小,就会重新分配内存,创建一个更大数组,并将原先数组复制过来,再丢弃旧数组。...尽量早释放无用对象引用 大部分时,方法局部引用变量所引用对象随着方法结束变成垃圾,因此,大部分时候程序无需将局部,引用变量显式设为null。...尽量使用System.arraycopy ()代替通过来循环复制数组 System.arraycopy() 要比通过循环来复制数组多。 23....从技术上讲,你甚至可以随意地抛出异常,不用花费很大代价。招致性能损失不是 throw 操作——尽管没有预先创建异常情况下就抛出异常是有点不寻常。

    34720

    Java性能优化50个细节(典藏版)

    尽量合适场合使用单例 使用单例可以减轻加载负担,缩短加载时间,提高加载效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面: 第一,控制资源使用,通过线程同步来控制资源并发访问...使用中,如果超出这个大小,就会重新分配内存,创建一个更大数组,并将原先数组复制过来,再丢弃旧数组。...尽量早释放无用对象引用 大部分时,方法局部引用变量所引用对象随着方法结束变成垃圾,因此,大部分时候程序无需将局部,引用变量显式设为null。...尽量使用System.arraycopy ()代替通过来循环复制数组 System.arraycopy() 要比通过循环来复制数组多。 ● 24....从技术上讲,你甚至可以随意地抛出异常,不用花费很大代价。招致性能损失不是 throw 操作——尽管没有预先创建异常情况下就抛出异常是有点不寻常。

    41820

    Java高级开发必会50个性能优化细节(珍藏版)

    尽量合适场合使用单例 使用单例可以减轻加载负担,缩短加载时间,提高加载效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面: 第一,控制资源使用,通过线程同步来控制资源并发访问...使用中,如果超出这个大小,就会重新分配内存,创建一个更大数组,并将原先数组复制过来,再丢弃旧数组。...尽量早释放无用对象引用 大部分时,方法局部引用变量所引用对象随着方法结束变成垃圾,因此,大部分时候程序无需将局部,引用变量显式设为null。...尽量使用System.arraycopy ()代替通过来循环复制数组 System.arraycopy() 要比通过循环来复制数组多。 ● 24....从技术上讲,你甚至可以随意地抛出异常,不用花费很大代价。招致性能损失不是 throw 操作——尽管没有预先创建异常情况下就抛出异常是有点不寻常。

    46050

    Java 50个细节,可以提高程序性能

    尽量合适场合使用单例 使用单例可以减轻加载负担,缩短加载时间,提高加载效率,但并不是所有地方都适用于单例 简单来说,单例主要适用于以下三个方面: 控制资源使用,通过线程同步来控制资源并发访问...使用中,如果超出这个大小,就会重新分配内存,创建一个更大数组,并将原先数组复制过来,再丢弃旧数组。...尽量早释放无用对象引用 大部分时,方法局部引用变量所引用对象随着方法结束变成垃圾,因此,大部分时候程序无需将局部,引用变量显式设为null。...尽量使用System.arraycopy ()代替通过来循环复制数组 System.arraycopy() 要比通过循环来复制数组多。 24....从技术上讲,你甚至可以随意地抛出异常,不用花费很大代价。招致性能损失不是 throw 操作——尽管没有预先创建异常情况下就抛出异常是有点不寻常。

    32720

    Java 性能优化 50 个细节(珍藏版)

    尽量合适场合使用单例 使用单例可以减轻加载负担,缩短加载时间,提高加载效率,但并不是所有地方都适用于单例 简单来说,单例主要适用于以下三个方面: 控制资源使用,通过线程同步来控制资源并发访问...使用中,如果超出这个大小,就会重新分配内存,创建一个更大数组,并将原先数组复制过来,再丢弃旧数组。...尽量早释放无用对象引用 大部分时,方法局部引用变量所引用对象随着方法结束变成垃圾,因此,大部分时候程序无需将局部,引用变量显式设为null。...尽量使用System.arraycopy ()代替通过来循环复制数组 System.arraycopy() 要比通过循环来复制数组多。 24....从技术上讲,你甚至可以随意地抛出异常,不用花费很大代价。招致性能损失不是 throw 操作——尽管没有预先创建异常情况下就抛出异常是有点不寻常。

    80001

    Java性能优化48条+七个案例

    使用中,如果超出这个大小,就会重新分配内存,创建一个更大数组,并将原先数组复制过来,再丢弃旧数组。...如: StringBuffer buffer = new StringBuffer(1000); 尽量早释放无用对象引用 大部分时,方法局部引用变量所引用对象随着方法结束变成垃圾,因此,大部分时候程序无需将局部...尽量使用System.arraycopy ()代替通过来循环复制数组 System.arraycopy() 要比通过循环来复制数组多。...从技术上讲,你甚至可以随意地抛出异常,不用花费很大代价。招致性能损失不是 throw 操作——尽管没有预先创建异常情况下就抛出异常是有点不寻常。...比如initXXX()中,因为直接调用某方法赋值可能因为类尚未初始抛空指针异常,如: public int state = this.getState()。

    31010

    必会55个Java性能优化细节!一网打尽!

    尽量合适场合使用单例 使用单例可以减轻加载负担,缩短加载时间,提高加载效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面: 第一,控制资源使用,通过线程同步来控制资源并发访问...使用中,如果超出这个大小,就会重新分配内存,创建一个更大数组,并将原先数组复制过来,再丢弃旧数组。...尽量早释放无用对象引用 大部分时,方法局部引用变量所引用对象随着方法结束变成垃圾,因此,大部分时候程序无需将局部,引用变量显式设为null。...尽量使用System.arraycopy ()代替通过来循环复制数组 System.arraycopy() 要比通过循环来复制数组多。 24....从技术上讲,你甚至可以随意地抛出异常,不用花费很大代价。招致性能损失不是 throw 操作——尽管没有预先创建异常情况下就抛出异常是有点不寻常。

    34000

    Java性能优化45个细节(珍藏版)

    尽量合适场合使用单例 使用单例可以减轻加载负担,缩短加载时间,提高加载效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面: 第一,控制资源使用,通过线程同步来控制资源并发访问...使用中,如果超出这个大小,就会重新分配内存,创建一个更大数组,并将原先数组复制过来,再丢弃旧数组。...尽量早释放无用对象引用 大部分时,方法局部引用变量所引用对象随着方法结束变成垃圾,因此,大部分时候程序无需将局部,引用变量显式设为null。...尽量使用System.arraycopy ()代替通过来循环复制数组 System.arraycopy() 要比通过循环来复制数组多。 24....从技术上讲,你甚至可以随意地抛出异常,不用花费很大代价。招致性能损失不是 throw 操作——尽管没有预先创建异常情况下就抛出异常是有点不寻常。

    51850

    代码优化那些事

    尽量合适场合使用单例 使用单例可以减轻加载负担,缩短加载时间,提高加载效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面: 第一,控制资源使用,通过线程同步来控制资源并发访问...使用中,如果超出这个大小,就会重新分配内存,创建一个更大数组,并将原先数组复制过来,再 丢弃旧数组。...尽量早释放无用对象引用 大部分时,方法局部引用变量所引用对象 随着方法结束变成垃圾,因此,大部分时候程序无需将局部,引用变量显式设为null。...尽量使用System.arraycopy ()代替通过来循环复制数组 System.arraycopy() 要比通过循环来复制数组多 24....这里有个注意,给成员变量设置初始值但需要调用其他方法时候,最好放在一个方法比如initXXX()中,因为直接调用某方法赋值可能因为类尚未初始抛空指针异常,如:public int state =

    39630
    领券