持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第10天,点击查看活动详情
目录
今日题
题目
const content = `${{} && 'typeof'}${NaN && `false`}`
console.log(content)
分析
只有两行语句,这应该是有史以来最简单的JS每日一题了吧。还是老规矩,读到这里还没点赞的小伙伴赶紧先点个赞。接下来咱们开始分析,这道题首先得明白&&运算符的使用,不止是&&,比如||、!、++、--等等都要懂得具体的用法。在面对&&时有一个极其简单的口诀"一假则假,全真则真",意思就是只要&&两边有一个是false,那么整个&&就会返回false,如果&&两边都为true,那么就返回true。而||也有一个极其简单的口诀与&&相对应,那就是“一真则真,全假则假”,意思就是只要||两边有一个是true,那么整个||就会返回true,如果||两边全为false,那么就返回false,以上说的是&&、||的判断条件,也就是说它们“短路操作”的特性,但在JavaScript中,至于&&、||的返回值到底是什么还有待探究。
昨日题
题目
const one = () => console.log(1)
const two = () => console.log(2)
const three = () => setTimeout(() => console.log(3))
one()
three()
two()
答案
1 2 3
解析
首先任务分为同步任务与异步任务,执行代码的顺序也是先执行同步任务再执行异步任务,而异步任务的执行也是有顺序的,是按照放入队列的顺序来依次执行的,因为有eventloop的存在,所以先放入的会先执行,后放入的会后执行。本题当中虽然one、two、three函数都属于同步代码,但他们的函数体却大不相同。函数one、two的职责是立即执行console.log,所以属于同步代码,而three函数的函数体为一个定时器,定时器的职责为间隔多长时间后执行console.log,因为定时器为异步任务,所以也就导致three函数为异步函数。先执行one函数,输出1;再执行three函数,随后将定时器放入定时器模块中,等到时间到了之后便执行setTimeout中的函数;再执行two函数,输出2;取出异步任务然后执行,输出3。所以本题输出结果为'1 2 3'
结语
此文章已收录至《JavaScript每日一题》专栏,如果你对本专栏有任何建议,欢迎反馈。如果你对此文章中的题目还有不懂的地方,那么请在评论区留言与大家一起讨论吧。创作不易,少年,就请留个赞再走吧!