前端笔试题总结,持续更新中......

122 阅读3分钟

CSS

1.伪类选择器顺序

顺序为a:link,a:visited,a:hover,a:actived

可记忆为“LVHA”,love and hate

原理:后面的样式设置会覆盖前面的样式设置,比如将hover放在actived后面,则actived不会生效,因为点击的时候activted和hover会同时触发,而hover在后面会覆盖actived.如果actived在hover后面,则触发actived的时候,actived会覆盖hover,所以actived正常生效。

2.link和@import区别

  • 从属关系来看:link属于html的标签,除了可以导入css还可以导入其他资源。其中的rel属性表明了当前文档和被链接文档之间的关系。而@import只能引入样式文件。
  • 加载顺序:页面加载时,link会和html一同加载,而@import会在页面加载完毕后被加载。
  • 兼容性:@import是css2.1才有的语法,而link没有兼容性。
  • DOM: js会操纵DOM去修改link引入的样式,而不能修改@import引入的样式。
  • 覆盖:@import引入的样式会被置于样式表的顶部,所以@import引入的样式会被link引入的样式覆盖。
  • @import写法 :
    @import url(style.css)
    @import 'style.css'

推荐使用link来引入样式,因为@import会导致重绘。



JavaScript

defer和async的区别

  • <script src='xxx'></script>
  • <script src='xxx' async></script>
  • <script src='xxx' defer></script>

    在html中会遇到这三类script,区别如下。
    当执行到<script src='xxx'></script>时,浏览器会去发送网络请求拿到js文件,然后立即执行js文件。这个过程会暂停解析DOM树。js文件执行完后才开始继续解析DOM树
    当执行到<script src='xxx' async></script>时,会异步发送网络请求获取js文件,获取js文件这个过程是异步的,所以不会阻塞DOM树解析。而当获取到js文件后会立即执行,阻塞DOM树解析。因为网络请求速度不被控制,所以这一类js文件的执行顺序不受控制
    当执行到<script src='xxx' defer></script>时,浏览器会异步发送网络请求获取js文件,获取js文件这个过程是异步的,所以不会阻塞DOM树解析。而当获取到js文件后不会立即执行js文件,而是等到DOM树解析完成后才执行获取的js文件,执行顺序,按照代码中顺序执行

0.1+0.2!=0.3

一句话总结:二进制模拟十进制进行计算的精度丢失问题

这个面试题涉及的知识点:

  • 计算机是无法进行十进制计算的,只能进行二进制计算
  • 当计算0.1+0.2时,首先要把0.1,0.2转换成二进制。
  • 有些十进制数在进行二进制转换时,会变成无限循环的二进制
  • js的Number类型遵循IEEE754规范(双精度),只有64位.超过64位,要进行0舍1入的操作。(精度丢失)

    进制转换和对阶运算都会造成精度丢失

ECMAScript和JavaScript的区别

Javascript包含了ECMAScript(语法,数据类型)和DOM(文档操作接口),BOM(浏览器操作接口)
ECMAscript是JavaScript的一种语法规范(比如说this,执行上下文,预编译....),而JavaScript是ECMAScript的扩展。



参考:

图解 script 标签中的 async 和 defer 属性
0.1 + 0.2不等于0.3?为什么JavaScript有这种“骚”操作?