原生JS、Ajax、jsonp

237 阅读3分钟

原生js

1.改变this指向的三个方法

bind() call() apply()方法

2.本地存储和cookie

区别
   1. cookie存储的数据比较小
   2. cookie不能实现永久存储
   3. cookie存储在服务器,而本地存储存储在客户端
本地存储的方法
   1. localStorage.getItem(key) // 取值
   2. localStorage.setItem(key,value) // 存值
   3. localStorage.removeItem(key) // 删除某一个
   4. localStorage.clear() // 全部清空
    设置cookie
    function setCookie (key,val,date){
    	var oDate = new Date();
        oDate.setDate(oDate.getDate()+date); 
        document.cookie = key + '=' + val + ';expires = ' + oDate
    }
读取cookie
     function getCookie (name) {
	        var str = document.cookie;
	        var arrStr=str.split("; ")  
	        //遍历数组
	        for (var i = 0; i < arrStr.length; i++) {
	            // console.log(arrStr[i]); 
	            var arr=arrStr[i].split("=")
	            // console.log(arr);
	            if(arr[0]==name){
	                return arr[1]
	            }
	        }
	    }
	    console.log(getCookie('username'))
删除cookie
    function delCookie(name){
    	setCookie(name,'',-1) // 设置对应的字段为空,时间是-1就行了
    }
    delCookie('id')
  1. 原生js如何实现事件委托?

      获取事件对象,做兼容,通过e.target判断触发的目标元素是否是当前元素
    
  2. 数组冒泡排序的原理?

    通过比较两个相邻的元素,如果前一个比后一个大,则交换位置,并赋值给一个中间变量,以此类推
    
    
  3. 原生js和jq怎么复制元素,穿参数的区别

     原生js
         let div = document.querySelect('.wrap')
         div.cloneNode(true).appendChild(document.body)
     参数:
         1. 为true的时候,表示复制当前元素以及当前元素所有子元素
         2. 为false的时候,表示复制复制只复制当前元素
     jq
         $('.wrap').clone(blooean)
     参数
         1. 为true的时候表示复制当前元素和事件处理
         2. 为false的时候表示只复制当前元素
    
    
  4. Ajax的原理?

     通过XMLHtppRequest对象向服务器发送异步请求,然后通过js动态操作DOM更新页面
    
  5. Ajax为什么会有跨域?

     同源策略问题,规定同一个域名,端口号,协议名才能操作域下的资源
    
  6. 如何解决跨域问题?

      1. jsonp:
             动态创建script标签,通过src属性没有跨域的限制,将Ajax的接口地址赋值给src属性
         在地址后面拼接上callback函数发送给后端,后端解析callback函数,并将数据拼接到
         该函数的参数中返回给前端
     2. cors原理
         在响应里添加下面的
         res.setHeader('Access-Control-Allow-Origin','http://127.0.0.1:3000');
         //或者
         res.setHeader('Access-Control-Allow-Origin','*');
    
    
  7. 原生JS的Ajax的封装步骤

        1. 创建xhr对象,做兼容
        2. 判断请求方式 GET POST
        3. 监听请求状态,接受数据
        4. 格式化参数
    
  8. Ajax的状态码和服务器的状态码?

     Ajax的状态码
         0:请求未初始化(还没有调用 open())。
    
         1:请求已经建立,但是还没有发送(还没有调用 send())。
         
         2:请求已发送,正在处理中(通常现在可以从响应中获取内容头)。
         
         3:请求在处理中;通常响应中已有部分数据可用了,但是服务器还没有完成响应的生成。
         
         4:响应已完成;您可以获取并使用服务器的响应了。
     服务器的状态码
         1**:信息性的状态码
         2**:成功的状态码
         3**:重定向
         4**:客户端错误
         5**:服务器错误