1、基本数据类型:string、boolean、number、undefined、null 引用数据类型:object、array、Date、regexp、function 2、判断数据类型: 1)、通过专有方法判断:push(),pop(); 2)、obj instanceof Array 返回值判断 3)、es5和jq都有方法array.isarray()。 4)、tostring.call(param)判断;返回格式【object Undefined】判断 3、绑定事件的方式: 1)、直接在dom里绑定:<div onclick="test()"></div> 2)、在js中通过onclick绑定:xxx.onclick=test; 3)、通过事件绑定:dom.addEventListener("click",test,boolean) 4、事件流模型: 1)、事件冒泡:事件由最具体的元素接收,然后逐级向上传播; 2)、事件捕捉:事件由最不具体的节点接收,然后逐级向下,一直到最具体元素 3)、dom事件流:三个阶段:事件捕捉,目标阶段、事件冒泡; 5、阻止事件传播: 1)、w3c,使用stopPropagation()方法阻止冒泡;阻止默认事件:preventDefault()。 2)、ie中cancelBubble = true阻止事件冒泡;阻止默认事件:window.event.returnValue = false。 6、Ajax(异步的JavaScript和xml) 1)、优点:(1)、可以使页面不重载全部内容的情况下加载局部内容,降低数据传数量 (2)、避免用户不断刷新或者跳转页面,提高用户体验。 2)、缺点:(1)、对搜索引擎不友好; (2)、要实现ajax前后退功能成本较大; (3)、跨域问题限制。 7、JSON: JSON是一种轻量级的数据交互格式,ECMA(欧洲计算机制造商协会)的一个子集。 1)、优点: 轻量级,占用带宽小易于人的阅读和编写,便于机器(js)解析,支持复合数据类型(数组、对象、字符、数字),能直接为服务器端代码使用。大大简化了服务器和客户端的代码开发量。 2)、缺点:相对xml通用性较差,数据可描述性较差。 8、undefined出现原因: 当只声明变量,并未赋值初始化的时候这个变量的值就是undefined。 9、for循环效率问题 1)、for(var i=0;i<arr.length;i++) 2)、for(var i in arr) 3)、for(var i=0,len=arr.length;i<len;i++) 第三种效率更高! 10、函数声明与函数表达式的区别:解析器会率先读取函数声明,并使在执行任何代码之前可用(也就是函数声明提升) 函数表达式则是解析器执行到他所在的代码,才会真正的执行 11、apply与call的区别:作用相同都是改变this的指向,但apply传入的是参数数组,call是离散型参数 12、伪数组:无法直接调用数组的方法,但仍有length属性 1)、转化为真的数组:Array.prototype.slice.call(fakeArray) 13、拖拽: 1)、mousedown事件触发后,开始拖拽 2)、mousemove时,通过e.clientX和clientY获取拖拽位置,实时更新位置; 3)、mouseup时,拖拽结束。 14、ajax: ajax({ url: "./TestXHR.aspx", //请求地址 type: "POST", //请求方式 data: { name: "super", age: 20 }, //请求参数 dataType: "json", success: function (response, xml) { // 此处放成功后执行的代码 }, error: function (status) { // 此处放失败后执行的代码 } }); function ajax(options) { options = options || {}; options.type = (options.type || "GET").toUpperCase(); options.dataType = options.dataType || "json"; var params = formatParams(options.data); var xhr; //创建 - 第一步 if (window.XMLHttpRequest) { xhr = new XMLHttpRequest(); } else if(window.ActiveObject) { //IE6及以下 xhr = new ActiveXObject('Microsoft.XMLHTTP'); } //连接 和 发送 - 第二步 if (options.type == "GET") { xhr.open("GET", options.url + "?" + params, true); xhr.send(null); } else if (options.type == "POST") { xhr.open("POST", options.url, true); //设置表单提交时的内容类型 xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xhr.send(params); } //接收 - 第三步 xhr.onreadystatechange = function () { if (xhr.readyState == 4) { var status = xhr.status; if (status >= 200 && status < 300 || status == 304) { options.success && options.success(xhr.responseText, xhr.responseXML); } else { options.error && options.error(status); } } } } //格式化参数 function formatParams(data) { var arr = []; for (var name in data) { arr.push(encodeURIComponent(name) + "=" + encodeURIComponent(data[name])); } arr.push(("v=" + Math.random()).replace(".")); return arr.join("&"); } |
|