前言:
最近总结了一些自己做题过程中遇到的易错问题,附带解析,希望对大家有帮助。
1.下面哪些执行结果为true()
A foo == new function(){ return String(foo); };
B foo == new function(){ return new String(foo); };
C [] == 0
D ![]
E !0
点击查看答案
答案:B C E
点击查看涉及到的知识点
1.new返回值
2.String()与 new String()区别
3.隐式类型转换
解析:
A foo == new function(){ return String(foo); };
String(foo)=>foonew function的return会判断返回值是否为引用数据类型,如果不是引用数据类型会返回空对象{},所以new function(){ return String(foo); }返回{}foo == {},{}进行隐式类型转换,{}调用valueOf方法返回{}对象,判断{}不是基本数据类型,继续调用toString()方法,返回[object Object]。foo == [object Object],返回false
B foo == new function(){ return new String(foo); };
new String(foo);返回String对象。foo == new String(foo), new String(foo)调用自身valueOf方法,返回foofoo == foo 返回 true
C [] == 0
引用数据类型会先转换为String,然后再转换为number
数组会先调用自身toString()方法 [].toString(); =>使用Number()转为数字 Number() => 00 == 0 => true
D ![]
将[]隐式转化为布尔值
Boolean([]) => true!true => false
E !0
Boolean(0) => false!false => true
Tips:
在==比较时遵循以下原则
1.如果有一个操作数是布尔值,则在比较相等性之前,将其转换为数值;2.如果一个操作数是字符串,另一个操作数是数值,在比较之前先将字符串转换为数值;3.如果一个操作数是对象,另一个操作数不是,则调用对象的valueOf()方法,用得到的基本类型值按照前面的规则进行比较;4.如果有一个操作数是NaN,无论另一个操作数是什么,相等操作符都返回false;5.如果两个操作数都是对象,则比较它们是不是同一个对象。如果指向同一个对象,则相等操作符返回true;6.在比较相等性之前,不能将null和undefined转成其他值。7.null和undefined是相等的。
2.以下哪些事件会在页面加载完成(onload)之前触发?
A readystatechange
B pageshow
C beforeunload
D DOMContentLoaded
点击查看答案
答案:A D
点击查看涉及到的知识点
1.渲染过程
解析
A readystatechange
document有个readyState属性来描述document的状态,当readyState发生变化时会触发readystatechange事件。
loading:文档加载中
interactive:文档加载完毕,此时同样会触发DOMContentLoaded事件
complete:文档以及所引入的图片等资源加载完毕,此时同样会触发load事件
B pageshow
当load事件触发完毕后会触发pageshow事件
C beforeunload
当dom卸载时会触发,浏览器刷新页面、跳转页面、关闭页面时会触发。
D DOMContentLoaded
当dom解析完毕,同步js、css加载完毕时触发,会早于load事件。
Tips:
页面加载渲染简易流程
html解析为DOM,css解析为CSSOM,合并css与dom生成渲染树,布局,并进行渲染
1.浏览器请求html
2.浏览器获取到html
3.浏览器解析html
4.解析到head标签,如果同步js则停止dom解析(等待js下载完毕并执行后继续dom解析),如果是css则不影响dom继续解析(但是影响dom渲染)。
5.进入body标签
如果只有dom则解析dom,同css树合并为渲染树,进行渲染。如果有外链js,如果是同步js则下载并执行js,此时dom暂停解析,等待js执行完毕后继续解析,解析后生成dom树,并渲染。如果有js也有css引入,同步js阻塞dom解析,dom等待js下载执行完,dom解析完毕后还需要等待css下载完成,然后dom与cssom合并为渲染树然后渲染。 6.当dom解析完毕
Tips:
浏览器遇到通过src引入外部js时,会先渲染已解析的dom
例:
引入外部js, 遇到script src时会先渲染已解析的dom
test.js
var i = 1000000000
while(i>0){
i--
}
console.log("解析完成")
html<h1>Hello
特别声明:文章来源用户上传并发布,本站只提供信息存储服务,不拥有所有权,内容仅供参考。