class MyPromise {
}
const promise1 = new MyPromise((resolve, reject) => {
setTimeout(() => {
resolve()
}, 3000)
})
promise1.then(rs => {
},()=>{}).catch(err => {})
原创小于 1 分钟
class MyPromise {
}
const promise1 = new MyPromise((resolve, reject) => {
setTimeout(() => {
resolve()
}, 3000)
})
promise1.then(rs => {
},()=>{}).catch(err => {})
根结点-->左子树-->右子树
左子树-->根结点-->右子树
左子树-->右子树-->根结点
const chenjian = new Promise(function(resolved, rejected) {
setTimeout( () => {
resolved()
},1000)
})
chenjian.then(function(){})
在ECMA262标准第三版中定义了四种类型的循环
for in 循环比其他几种要慢,这是因为每次迭代时都会搜索实例和原型对象
for (const key in object) {
if (object.hasOwnProperty(key)) {
const element = object[key];
}
}
/**
* 选择排序
* [3, 1, 4, 1, 5, 9]
* [1, 3, 4, 1, 5, 9]
* 原理:一个min指针,一次循环找到最小值,和min互换位置,保证最左边是最小值
*/
function selectSort(nums) {
for (let i = 0; i < nums.length - 1; i++) {
let min = i
for (let j = i + 1; j< nums.length; j++) {
if (nums[j] < nums[min]) {
min = j 1
}
}
[nums[i], nums[min]] = [nums[min], nums[i]]
}
return nums
}
类似于数组,但是值都是唯一的。
const a = new Set([1,2,3,3,4])
了解下各比较算法
1.比较熟悉的 == 和 ===,前者会在类型不相等时,依据规则进行类型转换。而后者则是不允许类型转化来比较。
2. Object.is()
方法也是比较两者是否相等,它使用的是**SameValue算法。**与 == 和 ===的区别如下
Object.is(NaN, NaN) // true
Object.is(0,-0) // false
Object.is(null, null) // true
NaN === NaN // false
null === null // true
0 === -0 // true
这个算法主要是定义"对象有没有被其他对象引用"为依据,来决定是否回收。
但是如果两个对象之前互相引用,那么就会回收不了
这个算法是定义"对象能否被获得"为依据,能否被获得指的是从根元素,也可以理解为全局,去获得被引用的元素,垃圾回收器将定期从根开始,找所有从根开始引用的对象,然后找这些对象引用的对象……从根开始,垃圾回收器将找到所有可以获得的对象和收集所有不能获得的对象。
现在所有浏览器的垃圾回收机制都是基于标记清除的算法来实现优化。