project.peopleList({
'projectId': that.id
}, function(data) {
console.log('data',data);
// 项目的所有参与人去掉项目负责人显示
that.peopleLists = [];//先清空,避免重复push
for(var i = data.length - 1; i>=0; i--){
if(data[i].peopleId == that.currentPeople){
data.splice(i,1)
}else{
that.peopleLists.push(data[i]);
that.$emit('update:peopleLists',that.peopleLists)
}
}
})
接口返回了3条数据,但是打印出的结果却是这样的
去掉for循环显示正常,想知道这是什么原因导致的这样的现象,谢谢大家
做个小实验:
现在讲讲我的理解,不一定对,大家一起讨论。
console.log(arr)
执行的是console.log(arr.toString())
,但是也许是出于美化的原因(这里我确实不太清楚),devtool 将其输出成了(3) [1, 2, 3]
的形式,要注意的是,这与console.dir(arr)
的输出Array(3)
完全不一样。也就是说,对于第一种情况来说,
(3) [1, 2, 3]
是执行console.log
时arr.toString()
的结果,而此时没有进入for
循环也就没有被splice
,因此是完整的三个元素;对于第二种情况来说,
Array(3)
也是执行console.dir
时arr
的状态,此时其中的元素数量也没有发生变化。当展开(这一步是工具提供的,不是
console.xxx
本身的能力)输出中的arr
时(无论是log
还是dir
的结果),执行引擎会展示该变量此时内存中的真实情况,即被splice
后的数组内容。第三种情况我个人觉得是印证了这种想法。
我觉得要查看某一时间点的某个变量的真实情况,要么简单的就直接
console.log(JSON.stringify(arr))
,要么下断点在watch
里查看。