js数组的一个奇怪的地方

源码如下

<!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()的输出原理就成了这个效果。