检验你的Js基础 - 下

179 阅读2分钟

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