Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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 Typescript数组推送,console.log的奇怪行为_Javascript_Arrays_Typescript_Console_Push - Fatal编程技术网

Javascript Typescript数组推送,console.log的奇怪行为

Javascript Typescript数组推送,console.log的奇怪行为,javascript,arrays,typescript,console,push,Javascript,Arrays,Typescript,Console,Push,当我尝试在阵列推送前后记录阵列时,两者的输出相同: class MyClass { order: number; } let list: MyClass[] = []; for (let i = 0; i < 5; i++){ list.push({ order: i }); } console.log('before push', list); list.push({ order: 999 }); console.log('after push', list); c

当我尝试在阵列推送前后记录阵列时,两者的输出相同:

class MyClass {
    order: number;
}

let list: MyClass[] = [];

for (let i = 0; i < 5; i++){
    list.push({ order: i });
}
console.log('before push', list);
list.push({ order: 999 });
console.log('after push', list);
class-MyClass{
顺序:编号;
}
让列表:MyClass[]=[];
for(设i=0;i<5;i++){
list.push({order:i});
}
console.log('before push',list);
list.push({order:999});
console.log('推后',列表);
“推之前”包含顺序为999的MyClass。为什么? 你可以在这里试一试:

原因是您记录了相同的阵列实例,并且控制台保存了对该实例的引用。
因此,在两次打印中,它都打印相同的实例,当您在第一次打印后更改实例时,控制台中的实例也会更改

控制台显示如下内容:

推之前[对象,对象,对象,对象,对象]
推后[对象,对象,对象,对象,对象,对象]

看起来一开始有5个项目,然后是6个项目,但是当您在控制台中打开数组时,在这两种情况下都会显示6个项目,因为它是同一个实例

如果希望在推送之前第一次打印与数据保持一致,请执行以下操作:

console.log('before push', list.slice(0));
list.push({ order: 999 });
console.log('after push', list);
从上传递的索引创建一个新数组,因此它基本上克隆了该数组