Bootstrap

12-09 零碎的知识

Typescript

1. 【译】TypeScript的Record类型说明

简单来说,Record类型就是为了处理含有不确定具体值,但是确定类型属性的对象的定义问题。比如以下:

interface IObject {
    [name:string]:number
}

// 以下等效
const obj:IObject = {
    '233':233
}

const obj2:Record<string,number> = {
    233:233
}
// 同时可以组合多种,比如联合类型,较灵活
type roles = 'tester' | 'developer' | 'manager'
const staffCount: Record<roles, number> = {
  tester: 10,
  developer: 20,
  manager: 1
}
2. 细数 TS 中那些奇怪的符号

文章里记录了一些常见的运算符,有的是ts才有的,有的是ecma规范的。列举一些常用的:

?? 空值合并运算符

在 TypeScript 3.7 版本中除了引入了前面介绍的可选链 ?. 之外,也引入了一个新的逻辑运算符 —— 空值合并运算符 ??。当左侧操作数为 null 或 undefined 时,其返回右侧的操作数,否则返回左侧的操作数。

逻辑或 || 运算符不同,逻辑或会在左操作数为 false 值时返回右侧操作数。也就是说,如果你使用 || 来为某些变量设置默认的值时,你可能会遇到意料之外的行为。比如为 false 值(’’、NaN 或 0)时。

const foo = null ?? 'default string';
console.log(foo); // 输出:"default string"

const baz = 0 ?? 42;
console.log(baz); // 输出:0

const baz_fix = 0 || 42;
console.log(baz_fix); // 输出42

Gitlab

可以通过gitlab api执行一些操作,比如生成tag,commit,push等等,需要实例化的时候设置token,即为一个gitlab账号的token

sessionStorage

HTML5 sessionStorage会话存储

wx.setStorage

sessionStorage可以理解为一个key-value的存储,只在浏览器的当前标签页生效,关闭后直接清除。当前标签页上的同源协议请求共享sessionStorage,所以常常用于SPA页面进行存储和传递数据

缓存策略

浏览器缓存机制剖析

同时 chrome存在后退缓存,即后退的情况下,会将直接读取css.js甚至ajax请求,从本地disk cache读取。
解决方案有:

  1. 加上 cache-control header
  2. ajax请求的url带上时间戳
NodeJs

nodejs真的是单线程吗?
简单来说就是异步以及I/O操作都交给libuv

浏览器线程和进程管理

从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理

iPhoneX适配

网页适配 iPhoneX,就是这么简单

简单来说,就是webkit属性上多了能够获取安全距离的api,通过这个来进行适配,防止按钮无法点击

npm包开发

从零开始发布自己的NPM包 _

vue运行时v-for key的关系

如果使用 index 作为 v-for 的 key 会发生什么?

简单来说,如果以数组index作为key的话,实际上在增删操作上,对diff算法实际上性能提升有限,而且在v-for渲染子组件的情况下,vue的就地更新机制,会保留子组件内部的DOM和状态,导致显示异常

;