泡泡乌龙学习中

 

JS数组引用另一个数组时的赋值问题

在改VUE前端代码的时候,图省事,使data()中一个变量引用了另一个data()变量。
首先需要定义两个变量,引用的变量设成null,被引用的变量初始化。

 1 data(){
 2   return {
 3     dialogModels: {
 4       production: [ 
 5         {prop: 'prj', label: '项目', type: 'select', options: null},
 6         {prop: 'production', label: '产品', type: 'select', options: null},
 7         {prop: 'comment', label: '备注', type: 'text'}
 8       ]
 9     },
10     projOptions: [],
11     prodOptions: [],    
12 }        

然后在组件mounted阶段把变量直接引用

1 mounted(){
2     this.dialogModels.production[0].options = this.projOptions;
3     this.dialogModels.production[1].options = this.prodOptions;
4 }

上述操作本没有错,但是在后续使用时发现了问题。

在某个事件中,要改变prodOptions数组中的值,this.prodOptions = [5, 6, 7],预期中this.dialogModels.production[1].options也跟随prodOptions改变,但是实际上this.dialogModels.production[1].options还是为空。纳闷了很久,然后想到是自己没搞懂JS数组赋值的问题。

JS在创建数组的时候是这样的。

 

1 var a = [1, 2, 3]; //实际上是先在内存上分别创建了a和数组[1, 2, 3],并把a指向[1, 2, 3]
2 var b = a; //在内存上又创建了b,然后把b也指向[1, 2, 3]
3 a = [4, 5, 6];//随后,改变a的值时,因为是直接赋值
4 //实际此时改变了a的指向,但b还是指向原来的[1, 2, 3]
5 //所以既要改变a,同时又要b同步变化时,需要改变[1, 2, 3]
6 a.push(4);
7 console.log(b); //[1, 2, 3, 4]

 

js数组的赋值

只怪自己基础掌握不牢,还得继续努力啊

PS:图片是网上找的,如有版权问题,请联系删除

 

posted on 2020-12-18 17:23  泡泡乌龙学习中  阅读(310)  评论(0编辑  收藏  举报

导航