JS 面试题

145 阅读2分钟

1.null 和 undifined 的区别

null是一个表示”无”的对象,转为数值时为0;undefined是一个表示”无”的原始值,转为数值时为NaN。 null表示”没有对象”,即该处不应该有值
(1) 作为函数的参数,表示该函数的参数不是对象。 (2) 作为对象原型链的终点。 undefined表示”缺省值”,就是此处应该有一个值,但是还没有定义
(1)变量被声明了,但没有赋值时,就等于undefined。 (2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。
(3)对象没有赋值的属性,该属性的值为undefined。 (4)函数没有返回值时,默认返回undefined

2. js 数据类型

js 基本数据类型:number, boolean, string, null, undefined

引用数据类型:数组,对象,函数

基本数据类型存储:栈 引用数据类型存储:栈存指针,堆放对象

赋值和浅拷贝的区别:

赋值只是复制地址,改变数值对象,原对象也改变。 浅拷贝复制一层,即改变浅拷贝对象中的基本类型变量,原对象不改变,但是如果改变浅拷贝对象中的印用类型,原对象也改变。 浅拷贝代码:

 var obj3 = shallowCopy(obj1);
   function shallowCopy(src) {
       var dst = {};
       for (var prop in src) {
           if (src.hasOwnProperty(prop)) {
               dst[prop] = src[prop];
           }
       }
       return dst;
   }

深拷贝代码:

function extend(target, source, deep) {
        for (key in source)
            if (deep && (isPlainObject(source[key]) || isArray(source[key]))) {
                // source[key] 是对象,而 target[key] 不是对象, 则 target[key] = {} 初始化一下,否则递归会出错的
                if (isPlainObject(source[key]) && !isPlainObject(target[key]))
                    target[key] = {}

                // source[key] 是数组,而 target[key] 不是数组,则 target[key] = [] 初始化一下,否则递归会出错的
                if (isArray(source[key]) && !isArray(target[key]))
                    target[key] = []
                // 执行递归
                extend(target[key], source[key], deep)
            }
            // 不满足以上条件,说明 source[key] 是一般的值类型,直接赋值给 target 就是了
            else if (source[key] !== undefined) target[key] = source[key]
    }

    // Copy all but undefined properties from one or more
    // objects to the `target` object.
    $.extend = function(target){
        var deep, args = slice.call(arguments, 1);

        //第一个参数为boolean值时,表示是否深度合并
        if (typeof target == 'boolean') {
            deep = target;
            //target取第二个参数
            target = args.shift()
        }
        // 遍历后面的参数,都合并到target上
        args.forEach(function(arg){ extend(target, arg, deep) })
        return target
    }

作者:sunshine小小倩
链接:https://juejin.im/post/59ac1c4ef265da248e75892b
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。