Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript数组奇怪的行为_Javascript_Arrays - Fatal编程技术网

Javascript数组奇怪的行为

Javascript数组奇怪的行为,javascript,arrays,Javascript,Arrays,按照惯例,据我所知 基本数据类型在传递值和 复杂数据类型在按引用传递下工作 如果是的话 var ary = [1,2,3]; var dupAry = ary; //Now I am going to rewrite the ary variable as follows ary = [3,4,5]; 现在我记录ary和dupAry的值,它记录不同的值。按照标准,两个数组都应该返回vaues 那么为什么它返回不同的数组值呢 另一种情况 var ary = [1,2,3];

按照惯例,据我所知

  • 基本数据类型在传递值和
  • 复杂数据类型在按引用传递下工作
如果是的话

var ary = [1,2,3];
var dupAry = ary;
//Now I am going to rewrite the ary variable as follows
ary = [3,4,5];
现在我记录ary和dupAry的值,它记录不同的值。按照标准,两个数组都应该返回vaues

  • 那么为什么它返回不同的数组值呢
  • 另一种情况

        var ary = [1,2,3];
        var dupAry = ary;
        //No I gonna apply splice method to the ary.
        ary.splice(0,1);
    
    现在,两个数组返回相同的值,并且可以很好地使用其标准值

  • 最后,为什么它不适用于第一个场景
  • 这将为
    ary
    指向
    dupAry
    的数组指定一个引用。
    ary
    dupAry
    现在都持有指向同一数组对象的引用。如果现在为
    ari
    指定了其他值,则
    dupAry
    将继续保留指向数组对象的引用,
    ari
    将保留其他值

    通过给变量赋值,您并不是在修改变量已经持有的对象;您正在修改变量所包含的对象引用

    这将修改两个变量所指向的实际对象,以便两者都能看到更改

    这将为
    ary
    指向
    dupAry
    的数组指定一个引用。
    ary
    dupAry
    现在都持有指向同一数组对象的引用。如果现在为
    ari
    指定了其他值,则
    dupAry
    将继续保留指向数组对象的引用,
    ari
    将保留其他值

    通过给变量赋值,您并不是在修改变量已经持有的对象;您正在修改变量所包含的对象引用

    这将修改两个变量所指向的实际对象,以便两者都能看到更改。

    执行此操作时:

    ary = [3,4,5];
    
    。。。您并没有更改数组:您正在销毁以前的引用,并使用一个全新的数组创建一个全新的变量*。请看以下内容的区别:

    ary.push(99);
    
    (*)当然,这不是一个新的变量,我不知道如何使用它。

    当您这样做时:

    ary = [3,4,5];
    
    。。。您并没有更改数组:您正在销毁以前的引用,并使用一个全新的数组创建一个全新的变量*。请看以下内容的区别:

    ary.push(99);
    

    (*)当然,这不是一个新的变量,我不知道怎么用词。

    当你做
    ari=[3,4,5]
    为ary分配一个新数组,并在创建
    ary=[3,4,5]时中断
    ary
    dupAry
    之间的引用
    将一个新数组分配给ary,并断开
    ary
    dupAry