美文网首页
面试题汇总

面试题汇总

作者: A落儿 | 来源:发表于2018-09-06 16:48 被阅读0次

谈谈浏览器的兼容性

1.html部分

H5新标签在IE9以下的浏览器识别

<!--[if lt IE 9]>
 <script type="text/javascript" src="js/html5shiv.js"></script>
<![endif]-->

html5shiv.js下载地址
https://github.com/aFarkas/html5shiv/releases

.ul标签内外边距问题ul标签在IE6\IE7中,有个默认的外边距,但是在IE8以上及其他浏览器中有个默认的内边距。解决方法:统一设置ul的内外边距为0

2.CSS样式的兼容性

  • css的hack问题:主要针对IE的不同版本,不同的浏览器的写法不同
    IE的条件注释hack:
<!--[if IE 6]>此处内容只有IE6.0可见<![endif]-->          
 <!--[if IE 7]>此处内容只有IE7.0可见<![endif]-->
  • IE6双边距问题:IE6在浮动后,又有横向的margin,此时,该元素的外边距是其值的2倍
    解决办法:display:block;

  • IE6下图片的下方有空隙
    解决方法:给img设置display:block;

  • IE6下两个float之间会有个3px的bug
    解决办法:给右边的元素也设置float:left;

  • IE6下没有min-width的概念,其默认的width就是min-width

  • IE6下在使用margin:0 auto;无法使其居中
    解决办法:为其父容器设置text-align:center;

  • 被点击过后的超链接不再具有hover和active属性
    解决办法:按lvha的顺序书写css样式,
    ":link": a标签还未被访问的状态;
    ":visited": a标签已被访问过的状态;
    ":hover": 鼠标悬停在a标签上的状态;
    ":active": a标签被鼠标按着时的状态;

  • 在使用绝对定位或者相对定位后,IE中设置z-index失效,原因是因为其元素依赖于父元素的z-index,但是父元素默认为0, 子高父低,所以不会改变显示的顺序

  • IE6下无法设置1px的行高,原因是由其默认行高引起的
    解决办法:为其设置overflow:hidden;或者line-height:1px;

  • margin在ie中和其他浏览器距离不太一样,用css hack解决

  • border-radius ie下不兼容,可以用背景图的方式写入。

  • border-radius ,fifter,css3的一些特性,可以根据不同浏览器加前缀-moz-,-ms-等前缀

  • Chrome 中文界面下默认会将小于 12px 的文本强制按照 12px 显示,可通过加入 CSS 属性 -webkit-text-size-adjust: none; 解决。

  • 怎么让Chrome支持小于12px 的文字?

p{
font-size:10px;
-webkit-transform:scale(0.8);
}
  • 介绍一下标准的CSS的盒子模型?与低版本IE的盒子模型有什么不同的

标准盒子模型:宽度=内容的宽度(content)+ border + padding +margin
低版本IE盒子模型:宽度=内容宽度(content+border+padding)+ margin

  • CSS选择器有哪些?哪些属性可以继承?

CSS选择符:id选择器(#myid)、类选择器(.myclassname)、标签选择器(div, h1, p)、相邻选择器(h1 + p)、子选择器(ul > li)、后代选择器(li a)、通配符选择器(*)、属性选择器(a[rel="external"])、伪类选择器(a:hover, li:nth-child)
可继承的属性:font-size, font-family, color
不可继承的样式:border, padding, margin, width, height
优先级(就近原则):!important > [ id > class > tag ]
!important 比内联优先级高

  • CSS优先级算法如何计算?

元素选择符: 1
class选择符: 10
id选择符:100
元素标签:1000

  • 如何居中div?如何居中一个浮动元素?如何让绝对定位的div居中?
//一般的div居中
border: 1pxsolid red;margin: 0auto; height: 50px;width: 80px;

//浮动居中(已知宽高)
border: 1px solid red;
float: left;
position:absolute;
width: 200px;
height: 100px;
left: 50%; 
top: 50%;
margin: -50px 0 0 -100px;

//绝对定位的左右居中:
border: 1px solid black;
position: absolute;
width: 200px;
height: 100px;
margin: 0 auto;
left: 0;
right: 0;

//使用bootstrap或者element等栅格系统
前者是分成12,后者是24

//display:table
//父级设置:
display:table
//需要居中的div元素
display:table-cell;
verticle-align:middle;
  • 用纯CSS创建一个三角形的原理是什么?
    需要把元素的宽度、高度设为0。然后设置边框样式。
width: 0;
height: 0;
border-top: 40px solid transparent;
border-left: 40px solid transparent;
border-right: 40px solid transparent;
border-bottom: 40px solid #ff0000;

3.js的兼容性

  • 标准的事件绑定方法函数为addEventListener,但IE下是attachEvent;
  • 事件的捕获方式不一致,标准浏览器是由外至内,而IE是由内到外,但是最后的结果是将IE的标准定为标准
  • window.event获取的。并且获取目标元素的方法也不同,标准浏览器是event.target,而IE下是event.srcElement
  • 在低版本的IE中获取的日期处理函数的值不是与1900的差值,但是在高版本的IE中和标准浏览器保持了一致,获取的值也是与1900的差值。
    比如var year= new Date().getYear();
  • ajax的实现方式不同,这个我所理解的是获取XMLHttpRequest的不同,IE下是activeXObject
  • IE中不能操作tr的innerHtml7.获得DOM节点的父节点、子节点的方式不同
    其他浏览器:parentNode parentNode.childNodes
    IE:parentElement parentElement.children

4.闭包和作用域

闭包的理解与使用
作用域相关
我把闭包和作用域放在一起理解.要理解闭包,首先要理解变量作用域.变量的的作用域无非就是两种:全局变量和局部变量.JavaScript的特殊之处就在于函数内部可以直接读取全局变量,
var n=999;
  function f1(){
    alert(n);
  }
  f1(); // 999
  另一方面,在函数外部自然无法读取函数内的局部变量.
  function f1(){
    var n=999;
  }
  alert(n); // error
  处于种种原因,我们有时候需要得到函数内的局部变量.但是,正常情况下,这是办不到的,只有通过变通方法才能实现.在函数内部,再定义一个函数:
  function f1(){
    var n=999;
    function f2(){
      alert(n); // 999
    }
    return f2;
  }
  var result=f1();
  result(); // 999
  由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成”定义在一个函数内部的函数”。所以本质上,闭包就是将函数内部和函数外部连接起来一座桥梁

GET和POST的区别

区别一:
GET重点从服务器上获取资源,POST重点向服务器发送数据.
区别二:
get传输数据是通过URL请求,置于URL后,并用”?”连接,多个请求数据间用”&”连接.post传输数据通过Http的post机制,将字段与对应值封存在请求实体中发送给服务器,这个过程对用户是不可见的;
区别三:
Get传输的数据量小,因为受URL长度限制,但效率较高;
Post可以传输大量数据,所以上传文件时只能用Post方式;
区别四:
get是不安全的,因为URL是可见的,可能会泄露私密信息,如密码等;
post较get安全性较高;
区别五:
get方式只能支持ASCII字符,向服务器传的中文字符可能会乱码。
post支持标准字符集,可以正确传递中文字符。

面向对象的理解

  • 进行功能拆分,同一类型的事件交给专门的人做。
  • 将一些事物的共性抽离出来归类
  • 封装 子类继承和使用父类的部分数据和方法。
  • 多态 同一类的对象调用相同的方法可以表现不同的行为
  • 变量单一
  • 一个接口只描述一种能力

es6

字符串拼接

  • 字符串拼接用插值形式
  • 支持输入html标签,用``包裹
  • 查找是否存在,有两种方法

startsWith(jspang)
endsWith(jspang);

  • 复制

document.write('jspang|'.repeat(3))

  • 二进制、八进制转换成十进制

二进制的开始是0(零),然后第二个位置是b(注意这里大小写都可以实现),然后跟上二进制的值就可以了。
也是以0(零)开始的,然后第二个位置是O(欧),然后跟上八进制的值就可以了。

  • 数字判断和转换
    Number.isFinite( xx )
  • 判断是否为整数Number.isInteger(xx)
  • Array.of()方法,把一堆文本或者变量转换成数组
  • find( value,index,arr)
  • 数组循环方法

for of

  • 数组遍历方法

forEach,fiflter,map(替换)

相关文章

网友评论

      本文标题:面试题汇总

      本文链接:https://www.haomeiwen.com/subject/lvmxgftx.html