面试准备——js部分(一)

1、写一个能遍历对象和数组的通用forEach函数?

  var key;
  if(obj instanceof Array){
    obj.forEach(function(item,index){
        fn(index,item)
    })
  }else{
    for(key in obj){
        fn(key,obj[key])
    }
  }
}

2、JavaScript 中如何获取当前的时间戳

Date.now()

new Date().getTime()

+new Date()

3、手写ajax

var xhr=new XMLHttpRequest()
xhr.open('GET','/api',false);
xhr.onreadtstatechange = function(){
  if(xhr.readyState==4 && xhr.status==200){
        conse.log(xhr.responseText)
    }
}
xhr.send(null);

4、跨域

原因:同源策略,cookie、localstorage、indexdb无法读取、dom无法操作、ajax无法发送
前后端通信方式:ajax、websocket、CORS
解决:
JSONP:网页动态插入<script>元素由它向跨源网址发出请求,服务器收到请求后,
将数据放在一个指定名字的回调函数里传回来。只能发get请求
window.postMessage:window对象新增了一个方法,允许跨窗口通信
CORS:跨源资源共享。服务器配置
websocket:是HTML5提供的一种在单个 TCP 连接上进行全双工通讯的协议。
Nginx反向代理

箭头函数有几个使用注意点。

(1)函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。

(2)不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。

(3)不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。

(4)不可以使用yield命令,因此箭头函数不能用作 Generator 函数。

上面四点中,第一点尤其值得注意。this对象的指向是可变的,但是在箭头函数中,它是固定的。

1、
function foo() {
  setTimeout(() => {
    console.log('id:', this.id);
  }, 100);
}
var id = 21;
foo.call({ id: 42 });
// id: 42
2、
function foo() {
  setTimeout(function() {
    console.log('id:', this.id);
  }, 100);
}
var id = 21;
foo.call({ id: 42 });
// id: 21
    原文作者:巩小白
    原文地址: https://www.jianshu.com/p/7bb3939d6ffc
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞