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);
从上传递的索引创建一个新数组,因此它基本上克隆了该数组