金山笔试题

笔试题答案

  1. alert(1&&2)输出的结果值是?

    输出结果应该是2,在js中,关系运算符并不一定会返回boolean值,根据传入值的类型不同会返回不同的值。
    可以返回对象、null、undefined、数值(NaN)、字符串、Boolean值;

    另外其属于短路操作;

  2. 有如下函数:

    Sum(2,3) =>5
    Sum(2)(3)=>5
    

    请写出sum函数的具体实现。

    (function(){
        var Sum = function(x){
            if(arguments.length===2){
                return arguments[0]+arguments[1];
            }else if (arguments.length===1) {
                return function(j){
                    return x+j;
                };
            }
        };
        alert(Sum(2,3));
        alert(Sum(2)(3));
        return {
            Sum: Sum
        };
    })();
    
  1. 请编写函数计算从整数1到n共出现多少个0.

    (function(){
        var total = function(n){
            var Sum0 = 0;
            for (var i = 0; i < n; i++) {
                var nstr = i.toString();
                var lengthOfNo0 = nstr.replace(/0/,"").length;
                var length0 = nstr.length - lengthOfNo0;
                Sum0 += length0;
            }
            return Sum0;
        };
        alert(total(1000));
    })();
    
  2. 请使用DOM操作来添加、移除、替换、插入、创建和查找节点。

    var elem = document.createElement("div");        
    document.appendChild(elem);
    docmment.removeChild(elem);
    document.replaceChild(elem,removedElem);
    document.inserteBefore(elem,relativeElem);
    document.getElementById("id");
    
  3. 请用原生JavaScript代码实现一个函数,功能是对JS对象的深度克隆。

    //js深度克隆
    
    //浅复制
    var shallowCopy = function(obj){
        var objCopy = {};
        for(var name in obj){
            if (obj.hasOwnProperty(name)) {
                objCopy[name] = obj[name];
            }
        }
        return objCopy;
    };
    //深复制
    var deepCopy1 = function(obj){
        var objCopy = {};
        objCopy = JSON.parse(JSON.stringify(obj));
        return objCopy;
    };
    var deepCopy2 = function deepCopy(obj,objCopy){
        objCopy = objCopy||{};
        for(var name in obj){
            if (typeof obj[name] === "object") {
                objCopy[name] = obj[name] instanceof Array?[]:{};
                deepCopy(obj[name],objCopy[name]);
            }else{
                objCopy[name] = obj[name];
            }
        }
    };
    // 测试
    var a = {
        name: "class1",
        number : 54,
        student: {
            "201421" : {
                name: "sunliying",
                age: 21
            },
            "201422" :{
                name: "yan",
                age: 22
            }
        },
        teacher: ["yangming","mudao"]
    };
    var b = {};
    console.log(shallowCopy(a));  
    //注意,浅复制对对象是引用的,所有复制来的对象都指向同一个对象
    console.log(deepCopy1(a));
    deepCopy2(a,b);
    console.log(b);