如何在javascript中使push、unshift、pop和shift仅与本地数组一起工作?

如何在javascript中使push、unshift、pop和shift仅与本地数组一起工作?,javascript,arrays,function,Javascript,Arrays,Function,我有一个函数来描述我的问题: 函数testingFunc(值){ var temp=值; log(“temp before:+JSON.stringify(temp)); log(“arrayTest before:+JSON.stringify(arrayTest)); 不移位温度(123); log(“unshift后的temp:+JSON.stringify(temp)); log(“取消移位后的arrayTest:+JSON.stringify(arrayTest)); 温度推动(45

我有一个函数来描述我的问题:

函数testingFunc(值){
var temp=值;
log(“temp before:+JSON.stringify(temp));
log(“arrayTest before:+JSON.stringify(arrayTest));
不移位温度(123);
log(“unshift后的temp:+JSON.stringify(temp));
log(“取消移位后的arrayTest:+JSON.stringify(arrayTest));
温度推动(456);
log(“推送后的temp:+JSON.stringify(temp));
log(“推送后的arrayTest:+JSON.stringify(arrayTest));
温度移位();
log(“班次后临时:+JSON.stringify(临时));
log(“班次后的arrayTest:+JSON.stringify(arrayTest));
temp.pop();
log(“pop之后的temp:+JSON.stringify(temp));
log(“弹出后的arrayTest:+JSON.stringify(arrayTest));
返回温度;
}
var arrayTest=[1,2,3,4,5];
var arrayTestTwo;
arrayTestTwo=测试函数(arrayTest);
log(“testingFunc:+JSON.stringify(arrayTest));

log(“arrayTestTwo:+JSON.stringify(arrayTestTwo))将数组赋给变量(或将其作为参数传递给函数)时,只存储对该数组的引用。如果两个或多个变量引用同一数组,对其中一个进行更改也会影响所有其他变量:

var-original=[];
var修改=原始;
console.log(原始、修改);//[] []
修改。推(1,2,3);

console.log(原始、修改);//[1,2,3][1,2,3]
将数组赋给变量(或将其作为参数传递给函数)时,仅存储对该数组的引用。如果两个或多个变量引用同一数组,对其中一个进行更改也会影响所有其他变量:

var-original=[];
var修改=原始;
console.log(原始、修改);//[] []
修改。推(1,2,3);

console.log(原始、修改);//[1,2,3][1,2,3]
数组与任何对象一样,都是通过引用传递的。这意味着您的临时工是arrayTest的别名。如果不想在函数外部修改数组,请创建一个副本

如果坚持使用.push()、.pop()、.shift()和.unshift(),则只需要一个浅拷贝,因为这些元素不会更改数组的任何元素,即使它们本身是引用(非原语)

对于数组浅拷贝,请使用.slice()

阅读说明将有助于:

数组与任何对象一样,都是通过引用传递的。这意味着您的临时工是arrayTest的别名。如果不想在函数外部修改数组,请创建一个副本

如果坚持使用.push()、.pop()、.shift()和.unshift(),则只需要一个浅拷贝,因为这些元素不会更改数组的任何元素,即使它们本身是引用(非原语)

对于数组浅拷贝,请使用.slice()

阅读说明将有助于:

您应该了解以下概念:

  • 纯功能:
  • 不变模式:
  • 参考
    之间的差异:
  • 如何制作浅拷贝或深拷贝:

  • 基本上,
    原语
    总是通过值
    传递,
    对象
    总是通过引用传递

    //使用原语:
    var a=“你好”;
    var b=a;
    b+=“世界”;
    console.log('a',a);
    console.log('b',b);
    //使用引用
    var a={hello:“hello”};
    var b=a;
    b、 你好+=‘世界’;
    console.log('a',a);
    console.log('b',b);
    
    //正如您所见,因为b只是对a的引用,编辑b您也在编辑a。
    您应该了解一些概念,例如:

  • 纯功能:
  • 不变模式:
  • 参考
    之间的差异:
  • 如何制作浅拷贝或深拷贝:

  • 基本上,
    原语
    总是通过值传递,
    对象
    总是通过引用传递

    //使用原语:
    var a=“你好”;
    var b=a;
    b+=“世界”;
    console.log('a',a);
    console.log('b',b);
    //使用参考资料
    var a={hello:“hello”};
    var b=a;
    b、 你好+=‘世界’;
    console.log('a',a);
    console.log('b',b);
    
    //正如您所看到的,因为b只是a的引用,编辑b您也在编辑a。
    对于数组、对象,有一些流行的库可以避免这个问题。例如,Facebook上有一些流行的库可以解决数组、对象的问题。等等,例如来自Facebook。

    var temp=value-这实际上并没有创建数组的副本。现在又有一个变量引用同一数组。您要查找的是深度副本…执行
    arr.slice()
    将创建一个浅副本
    var temp=value-这实际上并没有创建数组的副本。现在又有一个变量引用同一数组。您要查找的是深度副本…执行
    arr.slice()
    将为slice()注释创建一个浅副本+1。这是一种非常快速且肮脏的方法来复制一个几乎没有被充分讨论的数组。slice()注释+1。这是一种非常快速且肮脏的方法来复制一个几乎没有被充分讨论过的数组。