拼多多笔试
今天下午三点的笔试,前端方向70分钟,在这次的笔试中,也发现了一些自己以前没注意到的问题,决定把这些东西整理一下,注:以下内容完全来自于自己的回忆,如果有差错,还望指正
“+”的问题
第一个选择题是一个和“+”有关系的题目,首先,在JS中“+”是存在二义性的,就是它可以表示字符串的连接,也可以表示加号,进行以下尝试
1 + ‘3’ + ‘4’
“134”
1 + +’3’ + ‘4’
“44”
‘a’ + ‘b’ + 8
“ab8”
‘a’ - ‘b’ + 8
NaN
‘a’ - ‘b’ + ‘2’
“NaN2”
鼠标点击 input 元素后默认触发的事件执行顺序
之前没有做过这方面执行顺序的探究,现在来做一个测试,下面是测试代码
<input type="text" name="" id="in">
<script type="text/javascript">
var oIn = document.getElementById('in');
oIn.onmousedown = function() {
console.log('mousedown');
}
oIn.onmouseup = function() {
console.log('mouseup');
}
oIn.onfocus = function() {
console.log('focus');
}
oIn.onclick = function() {
console.log('click');
}
</script>
输出结果如下:
mousedown
focus
mouseup
click
所以执行顺序是,鼠标按下,获得焦点,鼠标弹起,获得点击
注意:在 IE 浏览器中,在 MouseDown 事件的处理函数中,取消浏览器默认行为执行后,如果点击的是可获得焦点的元素 (如 INPUT) ,那么他依然会获得焦点并触发 Focus 事件。
而在非 IE 浏览器中,此情况下元素无法获得焦点,也不会触发 Focus 事件
阻止a标签的跳转
<a href="https://www.baidu.com/" id="oa">点击</a>
<script type="text/javascript">
var oA = document.getElementById('oa');
oA.onclick = function(event) {
console.log('click');
if(event.preventDefault) {
event.preventDefault();
}else {
event.returnVale = false;
}
}
</script>
刚才测试了onmousedown和onmouseup,并不能阻止跳转
还有这样的方法
<a href="javascript:void(0);" >点击</a>
<a href="javascript:;" >点击</a>
关于this
attachEvent中的this指向的是window,而不是调用它的DOM对象
elem.attachEvent("on"+type,function(){
fn.apply(elem,arguments);
});
使用new的时候,构造函数的this指向创建的实例对象
状态码
400 Bad Request客户端请求语法错误,不能被服务器所理解
403 Forbidden 服务器收到请求,但是拒绝提供服务
401 未授权,一般来说该错误消息表明你首先需要登录(输入有效的用户名和密码)。如果你不输入这些信息,就会有401错误,这意味着验证信息出错,服务器无法识别你的身份
HTTP 2.0
HTTP 2.0最大的特点: 不会改动HTTP 的语义,HTTP 方法、状态码、URI 及首部字段,等等这些核心概念上一如往常,却能致力于突破上一代标准的性能限制,改进传输性能,实现低延迟和高吞吐量。而之所以叫2.0,是在于新增的二进制分帧层
HTTP2.0的优势:
- 二进制分帧,应用层(HTTP2.0)和传输层(TCP or UDP)之间增加一个二进制分帧层,采用二进制传输数据,而非HTTP1.1的文本格式,二进制格式在协议的解析和优化扩展带来更多的优势和可能
- 对消息头采用HPACK进行压缩传输,能够节省消息头占用的网络的流量,而HTTP1.1每次请求,都会携带大量冗余头信息,浪费了很多带宽资源
- 多路复用,就是多个请求都是通过一个TCP连接连接并发完成,还支持优先级和流量控制
- 服务器推送,服务器能够更快的把资源推送给客户端,例如主动推送JS和CSS文件,而不需要客户端解析HTML再发送这些请求
代码输出
console.log(a);
a = 3;
error
a是一个全局变量,但是如果输出,window.a就是undefined