面试题目

1、实现一个new操作符

        // <!-- new操作符 
        // <!-- 1.创建一个空对象 -->
        // <!-- 2.将空对象的原型指向构造函数的原型 -->
        // <!-- 3.将空对象作为构造函数的上下文(改变this指向) -->
        // <!-- 4.对构造函数的返回值处理判断  -->  return Object对象时,new操作符返回return的数据
        function Fn(age, name) {
            this.age = age
            this.name = name
            return {
                a: 1
            }
        }

        function myNew(fn, ...reset) {
            let obj = {}
            Object.setPrototypeOf(obj, fn.prototype)
            let result = fn.apply(obj, reset)
            return result instanceof Object ? result : obj
        }
        console.log(myNew(Fn, 18, 'zs'));

2、数据类型检测的方式有哪些

1.判断基本数据类型用 typeof 因为 Object,Array,Function都会返回Object

2.判断引用数据类型用 instanceof

typeof

console.log(typeof 2);               // number
console.log(typeof true);            // boolean
console.log(typeof 'str');           // string
console.log(typeof []);              // object    
console.log(typeof function(){});    // function
console.log(typeof {});              // object
console.log(typeof undefined);       // undefined
console.log(typeof null);            // object

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