笔试面试总结

来源:互联网 发布:想学电脑编程 编辑:程序博客网 时间:2024/05/29 19:13
1、Array API :join,pop,push,shift(从头删除),unshift(从头插入),sort,reserve(反转),slice(返回一段),splice(删除一段)
2、string API: charAt,contact,indexOf(查询字符串),lastIndexOf,match(返回匹配串),replace,slice(返回一段),split,substr
3、原生 元素(Element)节点 API:DOM节点分为 文档节点、元素节点、属性节点、文本节点、注释节点
   元素节点集合对象 NodeList 是一个类数组对象其中 list.item(0)相当于 list[0]
   属性:
         属性:attributes,className,id,style,title
内容:childNodes,firstChild,lastChild,innerHTML,textContent
周边:previousSibling,nextSibling,parentNode
   方法:
        增:appendChild,cloneNode,insertBefore(新子节点,位置子节点),(createElement在document节点才有)
删:removeChild
查:getElementsByTagName,hasChildNodes(getElementsByName和getElementById在document节点才有)
改:replaceChild
属性:getAttribute(返回指定属性的值),getAttribute(返回属性节点对象),hasAttribute(存在指定属性),hasAttribute(存在属性),
    removeAttribute,removeAttributeNode,setAttribute,setAttributeNode,(createAttribute在document节点才有)
4、js面向对象:
   function MyClass(){
      var private = 0; //私有成员
   }
   MyClass.prototype.public = 0; //公开成员


5、常考算法:

    (1)、字符串判重,用JS对象自带的map功能

    (2)、字符替换

var name = 'aaa bbb ccc';
var result =name.replace(/\b\w+\b/g, function(word){
  return word.substring(0,1).toUpperCase()+word.substring(1);}
);

   (3)、数组的深拷贝和浅拷贝

             浅拷贝:A.concat([]);

             深拷贝:JSON.parse(JSON.stringify(obj));

7、作用域

函数作用域(没有花括号包起来的块级作用域)。作用域链,就是嵌套的函数作用域。(变量所在的作用域离当前作用域越远,读取变量的性能越差,因此要尽量使用当前作用域的变量)


例一:
var scope="global";  
function t(){  
    console.log(scope); // undefined,在这个函数的任意位置定义的变量,作用域都是整个函数及其嵌套的内部函数
    var scope="local";
console.log(scope); // local ,相当于变量的定义提前,但初始化没有提前,在原位置
}  
t();  


例二:
   var a = 0;
   function f(){
      console.log(a);  // funtion a(){},有同名变量和函数时,这个标识符的定义被提前,且初始定义为这个同名函数
 var a = 1;
 console.log(a);  // 1
 function a(){}
 console.log(a);  // 1
   }   
   f();


全局作用域
function 外面定义的变量、没有var 定义的变量、window的成员


8、跨域问题
ajax不能向不同源的URL发起请求;JS不能查询或操作不同源的iframe。同源是指协议、域名、端口都相同。
特征:不能请求跨域数据,但能下载跨域的JS;JS操作是否跨域,要看iframe是不是引入自己的iframe,而不是看iframe是不是和自己来自同一个域。
解决办法
(1)jsonp(JSON with Padding)解决ajax跨域问题。
   用<script>请求一段JS文件,后台组装一个JS片段返回。返回的JS片段类似于 callback(数据),其中callback是源域里的function,数据即源域想要的数据。
   jquery 的 jsonp 接口,$.getJSON('http://example.com/data.php?callback=?',function(jsondata){}); 
   如果不跨域,就ajax。如果跨域,就新建一个临时函数,假设是f,并把?替换成f。后台读取callback参数,返回 f(jsondata)
(2)设置document.domain ,解决JS跨域问题,前提是主域名相同
   JS可以把一个iframe的domain设置成其父域名。例如可以在a.example.com的iframe中写document.domain='example.com'
   在这个基础上,可以解决ajax跨域问题。先在目标域的iframe中通过ajax获取数据,放到这个iframe中。再让源域的JS去读取。
(3)HTML 5 的window.postMessage() 提供跨域通信能力,从而解决跨域函数调用、数据传递等问题
   在源iframe中写 win.postMessage('数据','*'); win是目标iframe.contentWindow,第二个参数用于匹配目标域名
   在目标iframe中写 window.onmessage = function(e){console.log(e.data);} 

(4)利用XHR2(XMLHttpRequest Level 2)的CORS(跨域资源共享,Cross-Origin Resource Sharing)特性,解决ajax跨域问题

后台设置响应头 header("Access-Control-Allow-Origin:http://www.test.com"); ,即表示允许浏览器发送来自www.test.com的请求

设置响应头 Access-Control-Allow-Credentials:true ,即表示跨域请求时,允许带cookie。同时需要在发送跨域请求时设置xhr.withCredentials = true


10、DOM标准
DOM 0 :形成标准前
DOM 1 :1998年,支持HTML
DOM 2 :2000年,支持CSS,事件
DOM 3 :2003年,增加isEqualNode()、isSameNode()等方法
DOM 4 :2015年


11、垃圾回收

显式释放变量:置null


自动垃圾回收机制:

(1)、标记清除法:对不被引用的变量做标记,垃圾回收器定时清除这些变量
(2)、引用计数法(IE 6):对变量记录引用数,垃圾回收器定时清除引用为0的变量
引用计数法在循环引用的情况下会出现内存泄漏
var a = {
    k:b
}
var b = {
    k:a
}


IE的内存泄漏bug:删除元素没有先删除上面的事件,包装一个String对象 “a”.length


12、全局函数与运算符

instanceof  和 typeof 是运算符,typeof返回的是基础类型 ,instanceof 判断的是构造器或原型,返回Boolean


13、遍历数组
  for循环:是个表达式
  for-in循环:是个表达式,遍历的是key。不只遍历数组成员,还遍历自定义属性 和 原型链上定义的属性,也可以用于遍历对象。
  forEach循环:是个函数,不能break、continue、return
  for-of:ES6引入,是个表达式,遍历的是value,只遍历数组成员

0 0
原创粉丝点击