前端笔试题2 JS部分

 

笔试题2

var EventME = {};
EventME.addHandle = function(ele, eventName, handleFunction) {
    if (ele.addEventListener) {
        ele.addEventListener(eventName, handleFunction, false);
    } else if (ele.attachEvent) {
        ele.attachEvent(on + eventName, handleFunction);
    } else {
        ele[on + eventName] = handleFunction;
    }
};
window.onload = function() {
    //写一个函数  去除开头和结尾的空格
    //yourTrim();
    //生成一个页码  要求当前页之前最多有n页  当前页之后有n页  总共2n+1页 n可设置
    //makePage(4,3);//ok
    //makePage(3, 3); //ok
    //统计出现次数最多的字符以及其次数
    //countMaxChar();
    //统计字串长度  中文占2个长度
    //countWords();
    //数组去重
    //deleteDuplicate();
    //关于this的理解
    aboutThis();
    //计算二进制的值
    //calcBinNum(1001);
}

function yourTrim() {
    String.prototype.trimME = function() {
        var firstIndex = 0,
            endIndex = this.length - 1;
        for (var i = 0; i < this.length; i++) {
            if (this[i] !=  ) break;
        }
        firstIndex = i;
        i = this.length - 1;
        while (i >= 0) {
            if (this[i] !=  ) {
                break;
            } else {
                i--;
            }
        }
        endIndex = i;
        return this.slice(firstIndex, endIndex + 1);
    }

    console.log(new String(  bubu  ).trimME());
}

function makePage(curPageNo, nsize) {
    //DOM本身没有insertAfter()  自己写一个
    //若当前节点是最后一个节点的时候  新插入的后续节点将成为最后一个节点
    //因此使用appendChild()
    //若当前节点不是最后一个节点  那么首先通过nextSibling找到当前节点的额下一个节点
    //然后再使用insertBefore
    //这里的当前节点是指 新插入的后续节点之前得那个节点
    function myInsertAfter(after, curNode) {
        if (curNode.parentNode.lastChild == curPage) {
            curNode.parentNode.appendChild(after);
        } else {
            curNode.parentNode.insertBefore(after, curNode.nextSibling);
        }
        return after;
    }


    var wrapper = document.createElement(div);
    document.body.appendChild(wrapper);
    var curPage = document.createElement(span);
    curPage.innerHTML = curPageNo;
    curPage.className += cur;
    wrapper.appendChild(curPage);

    function createPage(pageNo) {
        var page = document.createElement(span);
        page.innerHTML = pageNo;
        return page;
    }
    curPageloop = curPage;
    countPre = 0;
    for (var i = curPageNo - 1; i >= 1; i--) {
        if (countPre++ >= nsize) {
            break;
        }
        pre = createPage(i);
        //在待操作的两个节点的父节点上调用insertBefore
        curPageloop.parentNode.insertBefore(pre, curPageloop);
        curPageloop = pre;
    };
    curPageloop = curPage;
    for (i = curPageNo + 1; i <= 2 * nsize + 1; i++) {
        nxt = createPage(i);
        myInsertAfter(nxt, curPageloop);
        curPageloop = nxt;
    };


}

function countMaxChar() {
    var str = hgfuihgwhiho rhfgsdchuyhhthsdfhcuhyt;
    var charlist = {

    };
    var max = 0;
    maxChar = ‘‘;
    for (var i = 0; i < str.length; i++) {
        //console.log(str[i]);
        if (!charlist[str[i]]) { //当这个字符是第一个出现  那么charlist中还没有这个key
            charlist[str[i]] = 1;
        } else {
            charlist[str[i]]++;
        }
        if (charlist[str[i]] > max) {
            max = charlist[str[i]];
            maxChar = str[i];
        }
    };
    console.log(max + maxChar);
}

function countWords() {
    //中文判断  参考http://www.jb51.net/article/14004.htm
    String.prototype.isChinese = function(i) {
        var re = /[^\u4e00-\u9fa5]/;
        if (re.test(this[i])) return false;
        return true;
    }
    String.prototype.myLength = function() {
        var count = 0;
        for (var i = 0; i < this.length; i++) {
            if (this.charCodeAt(i) > 255 && this.isChinese(i)) {
                count += 2;
            } else {
                count++;
            }
        };
        return count;
    }
    console.log(大家好sdc.myLength());
}

function deleteDuplicate() {
    Array.prototype.eraseDuplicate = function() {
        var after = {};
        var re = [];
        for (var i = 0; i < this.length; i++) {
            if (!after[this[i]]) {
                after[this[i]] = 1;
                re.push(this[i]);
            }
        }
        return re;
    };
    console.log([1, 2, 3, 3, 4, 55, 6, 6].eraseDuplicate());
}


// 关于this http://www.cnblogs.com/TomXu/archive/2012/01/17/2310479.html
function aboutThis() {
    var foo = {
        x: 10
    };
    var bar = {
        x: 20,
        test: function() {
            console.log(this === bar); // true
            console.log(this.x); // 20
            //this = foo; // 错误,任何时候不能改变this的值
        }
    };
    bar.test();// true 20 //因为是bar调用的test  所以test中得this就是bar
    foo.test=bar.test;//给foo对象添加了一个属性test 这个属性的内容是bar中test属性内容
    //注意不要写成foo.test=bar.test() 这是把bar对象test()执行结果赋值给foo.test属性
    foo.test();// false 10
    function foo2() {
        console.log(this);//window
    }
    foo2();
    var foo3 = {
        bar:function() {
            console.log(this);
            console.log(-----+(this===foo3));
        },
        sub:{
            barSub:function(){
                console.log(this);
                console.log(....+(this==foo3));
            }
        }
    }
    foo3.bar();//foo3 -----true
    foo3.sub.barSub();//sub  ....false
    // apply和call改变了所执行的函数中的this指向     
    foo3.sub.barSub.apply(Window);//Window  ....false
    var exe=foo3.bar;
    exe();//Window -----false


}

function calcBinNum(num){
    var nums=num+‘‘;
    var sum=0;
    var len=nums.length;
    for (var i = nums.length-1; i >=0; i--) {
        n=nums.charAt(i);
        sum+=Math.pow(2,len-1-i)*n;
    };
    console.log(sum);

}

 

前端笔试题2 JS部分,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。