宁静致远。
说明
- 知识在不断迭代,除了学习资料,那就是学习他人,来丰富自己。
- 以下全是别人的源码,会标明出处,非常感谢原作者,非常感谢开源。
优雅
- mitt:,
- axios:
- 零散:
mitt
// source code all = all || Object.create(null);
- 短路运算符:详情
- 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, 详情
- 补充:按位操作符'~',可以结合.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不传参数的时候,相当于浅复制一个数组,详情
axios
// source code 别着急
零散
// 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
好记性不如烂笔头。