2

宁静致远。


说明

  • 知识在不断迭代,除了学习资料,那就是学习他人,来丰富自己。
  • 以下全是别人的源码,会标明出处,非常感谢原作者,非常感谢开源。

优雅

mitt

  // source code
  all = all || Object.create(null);
  • 短路运算符:详情MDN
  • Object.create(null):生成的对象是一个原型为空的对象。节约内存且避免冲突,因为没有原型,且普通对象原型上的属性和方法也相应没有了。
  // source code
  (all[type] || (all[type] = [])).push(handler);
  // my code - bad
  if (all[type]) {
    all[type].push(handler)
  } else {
    all[type] = [handler]
  }
  • 简洁的队列赋值:短路逻辑判断 + 初始化 + 更新数组,简直不要太优雅。
  // source code
  all[type].splice(all[type].indexOf(handler) >>> 0, 1);
  • 按位操作符:1 >>> 0 = 1, -1 >>> 0 = 4294967295, 详情MDN
  • 补充:按位操作符'~',可以结合.indexOf()使用,因为对任一数值 x 进行按位非操作的结果为 -(x + 1),即:~-1 = 0
  // source code
  (all[type] || []).slice().map((handler) => { handler(evt); });
  (all['*'] || []).slice().map((handler) => { handler(type, evt); });
  • Array.slice():slice不传参数的时候,相当于浅复制一个数组,详情MDN

axios

Source Code - Axios

零散

  // source code
  !!(0)             // false
  !!(null)          // false
  !!('')            // false
  !!(undefined)     // false
  !!(NaN)           // false
  
  !!(2)             // true
  • !!: 强制转换成 boolean 类型,相当于 !(!val)。如果 val = 0/null/""/undefined/NaN 时,!!(val) = false,如果 val 是其他值,!!(val) = true
  • !: 取反运算,返回的也是一个 boolean 类型。如果 val = 0/null/""/undefined/NaN 时,!(val) = false,如果 val 是其他值,!(val) = true
  // source code
  +'123456'        // 123456, Number
  +new Date()      // 1527684413484, 相当于 new Date().getTime()
  • +: +val 将字符串数字转为数字。如果 val 是非字符串数字,则 +val = NaN

好记性不如烂笔头。


Huooo
328 声望33 粉丝

Coding happily and friendly and elegantly.