1. 浏览器如何解析css

CSS选择器的解析是从右向左解析的。若从左向右的匹配,发现不符合规则,需要进行回溯,会损失很多性能。若从右向左匹配,先找到所有的最右节点,对于每一个节点,向上寻找其父节点直到找到根元素或满足条件的匹配规则,则结束这个分支的遍历。两种匹配规则的性能差别很大,是因为从右向左的匹配在第一步就筛选掉了大量的不符合条件的最右节点(叶子节点),而从左向右的匹配规则的性能都浪费在了失败的查找上面。
而在 CSS 解析完毕后,需要将解析的结果与 DOM Tree 的内容一起进行分析建立一棵 Render Tree,最终用来进行绘图。在建立 Render Tree 时(WebKit 中的「Attachment」过程),浏览器就要为每个 DOM Tree 中的元素根据 CSS 的解析结果(Style Rules)来确定生成怎样的 Render Tree。

  1. 数组和对象的原生方法
    数组方法有
  • 转换方法:toLocaleString(),toString(),valueOf()
  • 栈方法:push(),pop()
  • 队列方法 shift(),unshif()
  • 重排序方法 reverse() ,sort()
  • 操作方法 concat() slice() splice()
  • 位置方法 indexOf() lastIndexOf()
  • 迭代方法 ecery() filter() fotEach() map() some()
  • 归并方法 reduce() reduceRight()
  1. 如果需要手动写动画,你认为最小时间间隔是多久,为什么?

多数显示器默认频率是60Hz,即1秒刷新60次,所以理论上最小间隔为1/60*1000ms = 16.7ms。

  1. 作用域问题(专开坑)
  2. js数据类型并写出它们的内存图
  • js数据类型:Undefined Null Boolean Number String Object
  • JS中的基础数据类型,这些值都有固定的大小,往往都保存在栈内存中,由系统自动分配存储空间。我们可以直接操作保存在栈内存空间的值
  • jS的引用数据类型,比如数组Array,它们值的大小是不固定的。引用数据类型的值是保存在堆内存中的对象。
  1. null和undefine的区别

答案

  1. 为什么会出现浮动和什么时候需要清除浮动?清除浮动的方式
  • 父元素的高度无法被撑开,影响与父元素同级的元素
  • 与浮动元素同级的非浮动元素(内联元素)会跟随其后
  • 若非第一个元素浮动,则该元素之前的元素也需要浮动,否则会影响页面显示的结构。
    方法:
  • 父级div定义height
  • 最后一个浮动元素后加空div标签 并添加样式clear:both。
  • 包含浮动元素的父标签添加样式overflow为hidden或auto。
  • 父级div定义zoom
  1. :after和::after有什么区别,有什么作用
  • 作用 使得html更加语义化。有些时候,为了某些特定的展现,不得不添加用于辅助布局的无意义html元素,这两个伪元素能实际起到这种辅助布局的作用,而又不增加无意义纯布局html元素,所以html就更简洁更纯粹了。
  • 区别before/:after这种写法css2中就有,叫伪类;::befroe/::after这种写法是css3中的,叫伪元素,但两种写法的作用是一样的。后者无法兼容IE低版本,如果要求兼容IE低版本请使用前者。注:对于img和input元素两者都不起作用