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有这种“骚”操作?