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