zoukankan      html  css  js  c++  java
  • 前端笔试题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);
    
    }
  • 相关阅读:
    redis概要学习
    http协议格式详解
    浅谈mysql
    linux常用命令
    Linux 程序管理
    认识与分析日志文件
    认识与学习bash
    例行任务管理
    软件安装的三大方法
    关于一些感慨
  • 原文地址:https://www.cnblogs.com/cart55free99/p/3680488.html
Copyright © 2011-2022 走看看