收藏
回答

微信小程序js代码问题

框架类型 问题类型 操作系统 工具版本
小程序 Bug Windows V1.02.1803210


我在编写js代码利用条件运算符(==)来判断两个数值时,为何会出现变量的绑定。

如:if(body[0].x == point.x){

               //做一些事情

}为什么会出现改变point.x的值时,body[0].x的值出跟着改变???

以下是部分源代码:

//变量声明
data: {
   //direction取值:
   //1:右   2:左
   //3:上   4:下
   body: [
     { x: 30, y: 10, color: '#00ff00',},
     { x: 20, y: 10, color: '#0000ff'},
     { x: 10, y: 10, color: '#ff0000'}
   ],
   food_point: {
     x: 50, y: 50, color: '#f0f00f'
   },
   direction: 1,
   stop_flag: 0,
   timer: null,
   food_color: [
     '#ff0000','#ff7f00','#ffff00',
     '#00ff00','#00ffff','#0000ff','#8b00ff',
     '#800000','#ff00ff'
   ],
   eat_flag: 0
 },
//条件判断,执行动作
//如果吃到食物
       if ((this.data.body[0].x == this.data.food_point.x)
       && (this.data.body[0].y == this.data.food_point.y)){
         //将食物添加到蛇的头部
         var temp_x = this.data.food_point.x;
         this.data.food_point.x = temp_x + 10;
         var len = this.data.body.unshift(this.data.food_point);//向蛇数组头部添加数据
         this.setData({eat_flag: 0});
       }
       next.x = this.data.body[0].x + 10;
       next.y = this.data.body[0].y;
       
       for(i = 0;i < this.data.body.length;i++){
         temp.x = this.data.body[i].x;
         temp.y = this.data.body[i].y;
         this.data.body[i].x = next.x;
         this.data.body[i].y = next.y;
         next.x = temp.x;
         next.y = temp.y;
       }
//改变食物位置
  if (this.data.eat_flag == 0){
     this.data.food_point.x = parseInt(Math.random() * 36)*10;
     this.data.food_point.y = parseInt(Math.random() * 24)*10;
     this.data.food_point.color = this.data.food_color[parseInt(Math.random() * this.data.food_color.length)];
     this.setData({eat_flag: 1});
   }

经过测试发现,如果把unshitf()函数去掉,就不会出现问题。但是这里需要用到unshift函数向数组的开头添加数据。

最后一次编辑于  2018-04-08
回答关注问题邀请回答
收藏
登录 后发表内容