JS的延迟加载
浏览器的加载时,遇到js会暂停dom的加载,先加载js async 和 defer 引入外部链接时加入这个属性
<script async type=""></script>
<script defer type=""></script>
相同:
- js和html是一起加载 的
区别:
- async
- 执行是异步的,谁先加载完谁执行
- defer
- 等html全部解析完成才会执行js代码,顺次执行的(按照代码的顺序)
JS的数据类型
基础类型: String Number Boolean null udefined Symbol 引用类型:Object NaN是一个数值类型的,单不是一个具体的数字
隐式转换考题下面的输出结果是什么
ture+1
'name'+ture
undefinde+1
typeof null
typeof NaN
typeof undefined
答案及解析2
ture会隐式转换为1 1+1=2'nameture'
字符串与任何类型相加都会变成字符串NaN
数字与除字符串以外的相加都会变成数字类型,undefined不确定就变成nanobject
null是一个特殊的objectnumber
NaN是一个不确定的数字undefined
就是一个数据类型所以输出的是undefinednull和undefined的区别
具体的区别? null是一个表示空的对象,转换为数值为0 undefined是一个表示无的基本类型值,转换为数值为NaN
拓展回答查过相关资料大致就是,作者设计js的参考的java里面的null
与java一样会被当成一个对象,认为表示无的值被当成一个对象有点不合理
null会被隐式转换为0,这样数据类型不匹配的时候他会自动转换,不容易发现错误
==和=== 的区别
都是比较运算符 == 比较的是值 === 比较的是值和数据类型
总结==比较
null == undefined
结果一定是truestring == number
string会隐式转换为numberboolean == number
boolean会隐式转换成numberobject == string || number
object会转换成基本类型- 转换是js的原型方法
valueOf()
该方法返回Math对象的原始值,由js后台自动调用的并不会显示地出现再代码中
===比较
- 推荐使用
- 避免一些小坑
- 性能上来讲会比
==
好,不需要走valueOf
JS微任务和宏任务
js是单线程的语言
同一时间只能做一件事,与用途有关主要是与用户互动和操作dom,就决定了只能是单线程
js异步执行代码
同步执行完 => 事件循环【微任务=> 宏任务】 同步任务执行完毕后,才会进入事件循环中,微任务全部只执行完毕才会进入宏任务
- 进入事件循环的有(定时器、请求、事件…)
- 事件循环包含(宏任务、微任务)
- 微任务:promise.then
- 宏任务:setTimeout
- 执行宏任务的前提是清空了所有的微任务