1.截取字符串abcdefg里面的cde
str.substring(2,5) str.substr(2,3) str.slice(2,3)
2.清除浮动的几种方式,各自优缺点
(1:使用空标签清除浮动clear:both。
原理:添加一个空div,利用css提高的clear:both清除浮动,让父级div能自动获取到高度
优点:通俗易懂,容易掌握
缺点:会添加很多无意义的空标签,有违结构与表现的分离,在后期维护中将是噩梦
建议:不推荐使用,但此方法是以前主要使用的一种清除浮动方法
(2:父级div定义overflow:hidden
原理:必须定义width或zoom:1,同时不能定义height,使用overflow:hidden时,浏览器会自动检查浮动区域的高度
优点:简单,代码少,浏览器支持好
缺点:不能和position配合使用,因为超出的尺寸的会被隐藏
建议:只推荐没有使用position或对overflow:hidden理解比较深的朋友使用
(3:父级div定义伪类:after和zoom(用于非IE浏览器)
原理:IE8以上和非IE浏览器才支持:after,原理和方法1有点类似,zoom(IE转有属性)可解决ie6,ie7浮动问题
优点:浏览器支持好,不容易出现怪问题(目前:大型网站都有使用,如:腾迅,网易,新浪等等)。
缺点:代码多,要两句代码结合使用,才能让主流浏览器都支持
建议:推荐使用,建议定义公共类,以减少CSS代码
3.闭包是什么,有什么特性
为什么产生闭包:javascript语言的特别之处就在于:函数内部可以直接读取全局变量,但是在函数外部无法读取函数内部的局部变量。出于种种原因,我们有时候需要获取到函数内部的局部变量。但是,上面已经说过了,正常情况下,这是办不到的!只有通过变通的方法才能实现。那就是在函数内部,再定义一个函数。
什么是闭包: 闭包就是能够读取其他函数内部变量的函数。在本质上,闭包是将函数内部和函数外部连接起来的桥梁。
优点:最大用处有两个,一个是可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中,不会在f1调用后被自动清除。
缺点:
1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。
4.IE常见的兼容问题
(1:不同浏览器的标签默认外补丁margin和内补丁padding不同
发生概率:100%
解决方案:使用CSS通配符*,设置内外补丁为0
(2:块属性标签float之后,又有横向的margin值,在IE6中显示会比设置的大(IE6双边距bug)
发生概率:90%
解决方案:在float标签样式控制中加入display:inline;
(3:滚动条到顶端的距离(滚动高度)到左端的距离
var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft;
(4: 获取className的集合
obj.getElementsByClassName(IE不支持)
(5: 获取非行内样式兼容
window.getComputedStyle ? getComputedStyle(obj,true)[attr] : obj.currentStyle[attr];
(6:获取事件对象的兼容
evt = evt || window.event
(7:获取键盘按键编码值的兼容
var key = evt.keyCode || evt.charCode || evt.which;
(8:阻止事件冒泡的兼容和阻止超链接的默认行为的兼容
e.stopPropagation ? e.stopPropagation() : e.cancelBubble = true; 事件冒泡
evt.preventDefault ? evt.preventDefault() : evt.returnValue = false;组织默认行为
(9:添加事件监听器的兼容和移除事件监听的兼容
obj.addEventListener(event,fn,boo);和obj.attachEvent('on' + event,fn);
obj.removeEventListener(event,fn,boo);和obj.detachEvent('on' + event,fn);
(10:获取事件源的兼容
var target = event.target || event.srcElement;
5.如何居中不定宽高的div
提供三种方法,供参考
使用Flex
只需要在父盒子设置:display: flex; justify-content: center;align-items: center;
使用 CSS3 transform
父盒子设置:position:relative
Div 设置: transform: translate(-50%,-50%);position: absolute;top: 50%;left: 50%;
使用 display:table-cell 方法
父盒子设置:display:table-cell; text-align:center;vertical-align:middle;
Div 设置: display:inline-block;vertical-align:middle;
6.TCP的3次握手
握手
1、客户端采用TCP协议将带有SYN标志的数据包发送给服务器,等待服务器的确认。
2、服务器端在收到SYN的数据包后,必须确认SYN,即自己发送的ACK标志,同时,自己也将会向客户端发送一个SYN标志。
3、客户端在接收到服务器短的SYN+ACK包后,自己会向服务器发送ACK包,完成三次握手。那么客户端和服务器正式建立了连接,开始传输数据。
7.请简述盒模型
CSS3中有个box-sizing属性可以控制盒子的计算方式,
content-box:padding和border不被包含在定义的width和height之内。对象的实际宽度等于设置的width值和border、padding之和。(W3C盒子模型)
border-box:padding和border被包含在定义的width和height之内。对象的实际宽度就等于设置的width值。(IE6盒子模型)
8.