源码如下
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
</body>
</html>
<script type="text/javascript">
var a = function(res){
console.log(res)
var data = res.data
console.log(data.splice(0,1))
// data.splice(0,1)
}
a({'data':[0,1,2]})
</script>
控制台输出如下
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
因为console.log()输出对象或数组时是在控制台显示一个对象或数组的引用。
在用console.log()输出数组或对象时,对象(数组)的属性是折叠不显示的。
如果你在console.log()输出之后改变了对象(数组)的属性,当你点击三角展开属性时,会重新读取对象(数组)当前的属性,也就是显示出来的是你点击三角展开时的属性,而不是执行console.log()时的属性。
解决方法是用console.log(JSON.stringify(arr));以字符串方式输出
再就是:js中对象和数组是按引用地址传递的。
当把一个数组从一个变量传递到另一个变量中时,两个变量都指向这同一个数组的引用地址。
var data = res.data //res.data和data变量都指向同一个数组的引用地址。
当改变其中一个数组data的元素时,用另一个res.data也是这同一个数组,会获取到一样的数组内容。
再结合上面说的console.log()的输出原理就成了这个效果。