网上js总结 以下为Web前端开发笔试题集锦之Javascript篇,移步HTML/CSS篇 1, 判断字符串是否是这样组成的,第一个必须是字母,后面可以是字母、数字、下划线,总长度为5-20 var reg = /^[a-zA-Z][a-zA-Z_0-9]{4,19}$/; reg.test("a1a__a1a__a1a__a1a__"); 2,截取字符串abcdefg的efg var str = "abcdefg"; if (/efg/.test(str)) { var efg = str.substr(str.indexOf("efg"), 3); alert(efg); } 3,判断一个字符串中出现次数最多的字符,统计这个次数
//将字符串的字符保存在一个hash table中,key是字符,value是这个字符出现的次数 var str = "abcdefgaddda"; var obj = {}; for (var i = 0, l = str.length; i < l; i++) { var key = str[i]; if (!obj[key]) { obj[key] = 1; } else { obj[key]++; } }
/遍历这个hash table,获取value最大的key和value/ var max = -1; var max_key = ""; var key; for (key in obj) { if (max < obj[key]) { max = obj[key]; max_key = key; } }
alert("max:"+max+" max_key:"+max_key); 4,IE与FF脚本兼容性问题 (1) window.event: 表示当前的事件对象,IE有这个对象,FF没有,FF通过给事件处理函数传递事件对象 (2) 获取事件源 IE用srcElement获取事件源,而FF用target获取事件源 (3) 添加,去除事件 IE:element.attachEvent(“onclick”, function) element.detachEvent(“onclick”, function) FF:element.addEventListener(“click”, function, true) element.removeEventListener(“click”, function, true) (4) 获取标签的自定义属性 IE:div1.value或div1[“value”] FF:可用div1.getAttribute(“value”) (5) document.getElementByName()和document.all[name] IE;document.getElementByName()和document.all[name]均不能获取div元素 FF:可以 (6) input.type的属性 IE:input.type只读 FF:input.type可读写 (7) innerText textContent outerHTML IE:支持innerText, outerHTML FF:支持textContent (8) 是否可用id代替HTML元素 IE:可以用id来代替HTML元素 FF:不可以 这里只列出了常见的,还有不少,更多的介绍可以参看JavaScript在IE浏览器和Firefox浏览器中的差异总结 5,规避javascript多人开发函数重名问题 (1) 可以开发前规定命名规范,根据不同开发人员开发的功能在函数前加前缀 (2) 将每个开发人员的函数封装到类中,调用的时候就调用类的函数,即使函数重名只要类名不重复就ok 6,javascript面向对象中继承实现 javascript面向对象中的继承实现一般都使用到了构造函数和Prototype原型链,简单的代码如下: function Animal(name) { this.name = name; }
Animal.prototype.getName = function() {alert(this.name)} function Dog() {}; Dog.prototype = new Animal("Buddy"); Dog.prototype.constructor = Dog; var dog = new Dog(); 7,FF下面实现outerHTML FF不支持outerHTML,要实现outerHTML还需要特殊处理 思路如下: 在页面中添加一个新的元素A,克隆一份需要获取outerHTML的元素,将这个元素append到新的A中,然后获取A的innerHTML就可以了。
<title>获取outerHMTL</title> <style> div{ background:#0000FF;width:100px;height:100px;} span{ background:#00FF00;width:100px;height:100px;} p{ background:#FF0000;width:100px;height:100px;} </style>P
<script type="text/javascript"> function getOuterHTML(id){ var el = document.getElementById(id); var newNode = document.createElement("div"); document.appendChild(newNode); var clone = el.cloneNode(true); newNode.appendChild(clone); alert(newNode.innerHTML); document.removeChild(newNode); } getOuterHTML("a"); </script> 8,编写一个方法 求一个字符串的字节长度 假设: 一个英文字符占用一个字节,一个中文字符占用两个字节 function GetBytes(str){ var len = str.length; var bytes = len; for(var i=0; i 255) bytes++; } return bytes; } alert(GetBytes("你好,as")); 9,编写一个方法 去掉一个数组的重复元素 var arr = [1 ,1 ,2, 3, 3, 2, 1]; Array.prototype.unique = function(){ var ret = []; var o = {}; var len = this.length; for (var i=0; i (2)构造函数 function Animal(name, color) { this.name = name; this.color = color; } (3) <script type="text/javascript"> var btn = document.getElementById("text"); btn.onclick = function() { alert(this.value); //此处的this是按钮元素 } </script> (4)CSS expression表达式中使用this关键字|
div element
|
P
21,请编写一个JavaScript函数 parseQueryString,它的用途是把URL参数解析为一个对象,如: var url = “http://witmax.cn/index.php?key0=0&key1=1&key2=2″; function parseQueryString(url){ var params = {}; var arr = url.split("?"); if (arr.length <= 1) return params; arr = arr[1].split("&"); for(var i=0, l=arr.length; ivar url = "http://witmax.cn/index.php?key0=0&key1=1&key2=2"; var ps = parseQueryString(url); alert(ps["key1"]); 22,ajax是什么? ajax的交互模型? 同步和异步的区别? 如何解决跨域问题? Ajax是多种技术组合起来的一种浏览器和服务器交互技术,基本思想是允许一个互联网浏览器向一个远程页面/服务做异步的http调用,并且用收到的数据来更新一个当前web页面而不必刷新整个页面。该技术能够改进客户端的体验。包含的技术: XHTML:对应W3C的XHTML规范,目前是XHTML1.0。 CSS:对应W3C的CSS规范,目前是CSS2.0 DOM:这里的DOM主要是指HTML DOM,XML DOM包括在下面的XML中 JavaScript:对应于ECMA的ECMAScript规范 XML:对应W3C的XML DOM、XSLT、XPath等等规范 XMLHttpRequest:对应WhatWG的Web Applications1.0规范(http://whatwg.org/specs/web-apps/current-work/) AJAX交互模型同步:脚本会停留并等待服务器发送回复然后再继续 异步:脚本允许页面继续其进程并处理可能的回复 跨域问题简单的理解就是因为JS同源策略的限制,a.com域名下的JS无法操作b.com或c.a.com下的对象,具体场景如下:
PS:(1)如果是端口或者协议造成的跨域问题前端是无能为力的 (2) 在跨域问题上,域仅仅通过URL的首部来识别而不会尝试判断相同的IP地址对应的域或者两个域是否对应一个IP 前端对于跨域的解决办法: (1) document.domain+iframe (2) 动态创建script标签 23,什么是闭包?下面这个ul,如何点击每一列的时候alert其index?
- 这是第一条
- 这是第二条
- 这是第三条