Part Three
1.
// instanceof
// 直接的字面量值判断数据类型,只有引用数据类型(Array,Function,Object)被精准判断
// 其他(数值Number,布尔值Boolean,字符串String)字面值不能被instanceof精准判断。
console.log(2 instanceof Number) // false
console.log(true instanceof Boolean) // false
console.log('str' instanceof String) // false
console.log([] instanceof Array); // true
console.log(function(){} instanceof Function); // true
console.log({} instanceof Object); // true
2.
// Event Loop 事件循环Demo
let a = () => {
setTimeout(() => {
console.log("任务队列函数1");
}, 0);
for (let i = 0; i < 5; i++) {
console.log("a的for循环");
}
console.log("a事件执行完");
};
let b = () => {
setTimeout(() => {
console.log("任务队列函数2");
}, 0);
for (let i = 0; i < 5; i++) {
console.log("b的for循环");
}
console.log("b事件执行完");
};
let c = () => {
setTimeout(() => {
console.log("任务队列函数3");
}, 0);
for (let i = 0; i < 5; i++) {
console.log("c的for循环");
}
console.log("c事件执行完");
};
a();
b();
c();
// a的for循环x5
// a事件执行完
// b的for循环x5
// b事件执行完
// c的for循环x5
// c事件执行完
// 任务队列函数a
// 任务队列函数b
// 任务队列函数c
// 异步任务列表会等主线程所有任务执行完成之后,才执行
3.
// 执行顺序
setTimeout(function () {
console.log(1);
},1000);
new Promise(function(resolve,reject){
console.log(2)
resolve(3) //Promise 成功后把3传入then的回调中
}).then(function(val){
console.log(val);
setTimeout(function(){
console.log(5);
},1000);
})
console.log(4);
// 2 4 3 1 5
// 1.先执行script同步代码
// 先执行new Promise中的console.log(2),then后面的不执行属于微任务
// 然后执行console.log(4)
// 2.执行完script宏任务后,执行微任务,console.log(3),没有其他微任务了。
// 3.执行另一个宏任务,定时器,console.log(1)
4.
// 排序后去重
var array = [2,3,1, 1, "1"];
function unique(array) {
var res = [];
var sortedArray = array.concat().sort();
var seen;
for (var i = 0, len = sortedArray.length; i < len; i++) {
// 如果是第一个元素或者相邻的元素不相同
if (!i || seen !== sortedArray[i]) {
res.push(sortedArray[i])
}
seen = sortedArray[i];
}
return res;
}
console.log(unique(array));
5.
// 去除字符串前后的空格符 - 手写trim()
let str = ' hello world '
let arr = str.split("")
console.log(arr)
arr.pop()
arr.shift()
console.log(arr.join(''))
6.
// 通过正则表达式去除空格符
let str = " a abc abcd abcde ";
let result = str.replace(/(^\s)|(\s$)/g , "");
console.log(result);
7.
// 手写instanceof
function myInstanceof(left,right){
let prototype = right.prototype
left = left.__proto__;
while(true){
if(left === undefined || left === null){
return false;
}
if(prototype === left){
return true;
}
left = left.__proto__;
}
}
var obj = {
name:1
}
console.log(myInstanceof(obj,Object)); // true