我知道的JS-其他


其他

Map、FlatMap 和 Reduce

map 遍历原数组,处理每个元素,返回一个新数组

["1", "2", "3"].map(parseInt);
//返回十进制的数,无法转换为数值则返回 NaN
//  parseInt('1', 0) -> 1
//  parseInt('2', 1) -> NaN
//  parseInt('3', 2) -> NaN

flatMap

var arr1 = [1, 2, 3, 4];

arr1.map(x => [x * 2]);
// [[2], [4], [6], [8]]

arr1.flatMap(x => [x * 2]);
// [2, 4, 6, 8]

// only one level is flattened
arr1.flatMap(x => [[x * 2]]);
// [[2], [4], [6], [8]]

//等价于
arr1.reduce((acc, x) => acc.concat([x * 2]), []);

彻底扁平化数组

const flattenDeep = arr =>
  Array.isArray(arr)
    ? arr.reduce((a, b) => [...a, ...flattenDeep(b)], [])
    : [arr];

Proxy 和 Reflect

基本用法

let p = new Proxy(target, handler);
// `target` 代表需要添加代理的对象
// `handler` 用来自定义对象中的操作

实现一个数据绑定和监听

let onWatch = target => {
  let handler = {
    get(target, property, receiver) {
      return Reflect.get(target, property, receiver);
    },
    set(target, property, value, receiver) {
      return Reflect.set(target, property, value, receiver);
    }
  };
  return new Proxy(target, handler);
};

精度问题

JS 采用 IEEE754 双精度版本,所以会有精度问题
0.1+0.2 != 0.3

parseFloat((0.1 + 0.2).toFixed(10));

(a ==1 && a== 2 && a==3) 可能为 true 吗?

//第一种

var temp = 1;
Object.defineProperty(window, "a", {
  get() {
    return temp++;
  }
});

//第二种

var a = {
  temp: 1,
  valueOf() {
    return this.temp++;
  }
};
//第三种

var a = {
  temp: 1,
  toString() {
    return this.temp++;
  }
};

文章作者: 沐雪
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 沐雪 !
评论
 上一篇
HTTP HTTP
多看阅读-图解 HTTP Web 使用一种名为 HTTP(HyperText Transfer Protocol,超文本传输协议)的协议作为规范,完成从客户端到服务器端等一系列运作流程。通常使用的网络(包括互联网)是在 TCP/IP 协议
2018-05-18
下一篇 
自用UWP应用备份 自用UWP应用备份
UWP用了黑苹果一段时间,但是毕竟是黑苹果,使用体验不够完美.强迫症的我还是回到了 win10,win10 真的越来越好了,从 win8 那条鱼开始基本每个预览版我都更新,也算见证了 win 这几年的变化.备份一下自己常用的 uwp 应用,
2018-05-10
  目录