类型
可以使用 interface 或者 type 快速定义类型。当你不知道某个function返回的是什么类型的值的时候可以使用ReturnType<typeof someFunc>来获得返回值类型.
js/ts 除了主要类型 string, number, boolean, null, undefined, symbol, bigint 之外都是Object. 也就是说Array, Object, Function, Map, Set, ... 都是Object 都可以用obj[key] = val 进行赋值并访问。而主要类型都是immutable的.
new ? 如果不使用 new 则只会将后面的 Constructor() 当普通function运行。
=== ? == ?
=== use to compare two variables’ values if same
== use to compare two variables if same
for loop?
for (const x in smth) or for (const x of smth)
in 通常用在 enumerable properties of an object . It iterates over the keys (property names) of the object.
of 通常用在 iterable object
Closure 闭包
当你在函数中定义了并返回了其他函数,并且其他函数会引用原来函数内容时,这就是一个闭包函数。外部通常无法访问闭包内的变量数据等。
数组的Callback Function
arr.reduce((accumulator, curr) => {}, init);: 这里的reduce是推理归纳而非减少, 使用reduce可以将curr以某种你想要的方式结合到init里. 也就是说,accumulator在刚开始是init, 随着reduce的进行,accumulator等于一个把所有遍历过的curr整合进init里的值arr.filter((val, idx) => {}): 可以利用filter把不想要的设置成false这样就不会被选中,想要的设置成true,filter会return一个新的数组arr.map((val, idx) => {}): 可以把每个值都进行一次你想要的transform,map会return一个新的数组
Promise
js的promise感觉就是python的coroutine. 生成Promise 对象需要实现对应的函数如:
const prom = new Promise((resolve, reject) => {})
async && await
所有async function 的返回值一定是Promise, 如果没有做promise处理会隐式的帮你处理。
await promise 只能用在async function中用于暂停function直到后面的promise完成
假如说我们有const prom = new Promise((res, rej) => {...});. 我们可以使用await prom等待它完成, 对于多个promise,可以使用await Promise.all([...]) 一次性等待全部完成。
then && catch && finally
此外 Promise有三种状态Pending, fulfilled 和 Reject.
如果不使用 await或者有什么要连锁处理的, 则需要使用
prom
.then((result) => {}) // promise fulfilled
.catch((error) => {}) // promise reject
.finally(() => {}) // promise done其中.then() 可以进行连锁处理,也就是说可以.then().then().{....}.then() 如果前面的.then()中返回promise对象。因为是连锁的所以我们.catch()和.finally()不需要做更改保持原来放在后面的位置就可以处理对应的错误
Race
利用Promise.race(promiseList) 返回最先完成的Promise
Time
const timerID = setTimeout(funcCallAfterTimeOut, time); 在time毫秒过后执行funcCallAfterTimeOut 函数,同时返回了一个timerID可以用于暂停这个timeout。例如使用clearTimeout(timerID)
const intervalId = setInterval(funcCall, time); 每time毫秒过后执行funcCall 函数,同时返回了一个intervalId可以用于暂停这个interval。例如使用clearInterval(intervalId)
杂项迷思
object 没有大小,obj.length 是一个 undefined 值。 如果想把它当unordered map来使用需要配合 Object 内置库使用,例如Object.keys, Object.values, Object.entries. Object 根据 numeric string / number keys 排序. 如果key不属于这个范畴则按照插入顺序。symbol则会被排到最后。
Map 只能 通过Map.entries(), Map.keys(), Map.values() 来进行 for loop