前端笔试题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); }