小程序项目中的一些小问题

一. 深拷贝与浅拷贝

场景 把数组arr1用等号赋值给arr2,这时想要对arr1进行操作,arr2也会跟着改变,但是我们并不想arr2跟着改变。如下:

var arr1 = [1,2,3];
var arr2 = arr1;
arr1.push(4);
console.log(arr1) // [1, 2, 3, 4]
console.log(arr2) // [1, 2, 3, 4]
复制代码

原因 在js里存在着深拷贝和浅拷贝的问题。浅拷贝就是增加了一个'指针'指向已存在的内存(JavaScript并没有指针的概念,这里只是用于辅助说明),浅拷贝只是拷贝了内存的地址,子类的属性指向的是父类属性的内存地址,当子类的属性修改后,父类的属性也会随之被修改;深拷贝就是增加一个“指针”,并申请一个新的内存,并且让这个新增加的“指针”指向这个新的内存地址,当我们需要复制原对象而又不能修改元对象的时候,深拷贝就是一个很好的的选择。

解决办法1 Array.from(要复制的数组)

var arr1 = [1,2,3];
var arr2 = Array.from(arr1);//ES6方法
arr1.push(4);
console.log(arr1) // [1, 2, 3, 4]
console.log(arr2) // [1, 2, 3]
复制代码

解决办法2 ...

var arr1 = [1,2,3];
var arr2 =[...arr1];//ES6方法
arr1.push(4);
console.log(arr1) // [1, 2, 3, 4]
console.log(arr2) // [1, 2, 3]
复制代码

解决办法3 通过json转换

var arr1 = [1,2,3];
var arr2 = JSON.parse(JSON.stringify(arr1));//JSON.stringify(c)转成json串,JSON.parse将json串转成json格式
arr1.push(4);
console.log(arr1) // [1, 2, 3, 4]
console.log(arr2) // [1, 2, 3]
复制代码

解决办法4 通过循环

var arr1 = [1, 2, 3];
var arr2 = [];
for (var i = 0; i < arr1.length; i++) {
   arr2[i] = arr1[i];
}
arr1.push(4);
console.log(arr1); // [1, 2, 3, 4]
console.log(arr2); // [1, 2, 3]
复制代码

二. 时间转时间戳

场景 把时间转换为时间戳,以下代码在安卓端都非常的好使,完全没有问题。

  var date = new Date('2018-08-30 15:30:00:00');
  var time1 = date.getTime();
  var time2 = date.valueOf();
  var time3 = Date.parse(date);
  console.log(time1);//1535614200000
  console.log(time2);//1535614200000
  console.log(time3);//1535614200000
复制代码

但是在iOS端,你会发现全都是NaN。

解决办法

var date = new Date('2018/08/30 15:30:00:00');
var time = Date.parse(date);//安卓、iOS都好用
console.log(time)//1535614200000
复制代码

注意 日期必须是“ / ”不能是别的字符串

三. picker-view-column 的宽度

项目中需要用到pick-view来写 一个自定义的时间选择器,写完之后发现picker-view-column 的宽度不管怎么设置,始终不起作用,后来想到picker-view-column不管设置多少个,他都一样宽, 可能是用了flex布局,所以就用flex设置了宽度,发现非常好用。

四. 神奇的textarea

场景 项目需要,在textarea上需要再覆盖一个view,不管这个view的z-index多高,textarea始终浮在这个view上。

原因 textarea是原生组件,原生组件的层级是最高的,所以页面中的其他组件无论设置 z-index 为多少,都无法盖在原生组件上。

解决办法1 在需要显示覆盖在textarea上的view现实的时候,把textarea隐藏起来

解决办法2 使用cover-view(覆盖在原生组件之上的文本视图)来覆盖它。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值