#HolyJS18在hh.ru展位进行的测验竞赛决赛分析

嗨,这是来自我们立场的问题分析的最后一部分。


在这里回答问题。


这里分析前四轮比赛。



在这里,关于主题的问题实际上没有分组,我们逐一分析所有问题。


出发:


结果如何?

let i = 0; let a = 1; for (; a >= 0; i++) { a -= 0.1; } console.log(i); a) 1 b) 11 c)  d) 10 

答案+解析

b)11
这里的一切都很简单。 这更多是正念的问题。 该循环将执行11次,因为 我们不严格
大于> ,并且大于或等于>=


结果如何?

 {} + []; a) 0 b) null c) '[object Object]' d) NaN 

答案+解析

a)0
这里的技巧是{}不会被解释为对象,而是被解释为空的代码块。 因此,表达式将转换为+[] ,这是0 ,因为 值将其转换为数字之前的+号。 我想指出的是,如果代码编写为console.log({} + []); ,则为[object Object] ,因为 这里{}将被解释为一个对象。


结果如何?

 [] + {}; 

a)0
b)空
c)'[对象对象]'
d)NaN


答案+解析

c)'[对象对象]'
在这里,根据规则,两个操作数都被简化为一个空数组的字符串-这是一个空字符串,并且是一个对象[object Object]


此代码将输出什么?

 let response = { data: '', errors: { code: 403 } }; console.log(typeof response.data.link); a) undefined b) object c) string d) function 

答案+解析

d)功能
字符串原型具有链接方法,因此正确答案是function


此代码将输出什么?

 const button = document.querySelector('button'); button.addEventListener('click', () => { console.log('FUS'); }); button.addEventListener('click', () => Promise.resolve('RO').then((x) => console.log(x))); button.addEventListener('click', () => { console.log('DAH!'); }); button.click(); a) FUS RO DAH! b) FUS DAH! RO c) RO FUS DAH! d) DAH! RO FUS 

答案+解析

b)FUS DAH! 反渗透
在这里,我们以编程方式触发click ,然后到达调用堆栈,第一个处理程序被触发-我们FUS ,我们到达第二个处理程序-我们将RO添加到队列中,因为 仍然click堆栈-不要调用promise。 我们进入下一个处理程序-输出DAH!click工作,队列为空,承诺被触发。


单击按钮时此代码将显示什么?

 const button = document.querySelector('button'); button.addEventListener('click', () => { console.log('FUS'); }); button.addEventListener('click', () => Promise.resolve('RO').then((x) => console.log(x))); button.addEventListener('click', () => { console.log('DAH!'); }); button.click(); a) FUS RO DAH! b) FUS DAH! RO c) RO FUS DAH! d) DAH! RO FUS 

答案+解析

a)FUS RO DAH!
用户在此处单击按钮,因此无需click堆栈,在第二个处理程序中,promise将立即生效。


此代码将输出什么?

 console.log(typeof Function````); a) TypeError b) SyntaxError c) 'function' d) 'undefined' 

答案+解析

d)'未定义'
在函数名称后使用模板文字时,将使用一个数组调用该数组,其中包含一个传递的值和一个包含raw值的数组。 Function ,与new Function函数构造new Function相同。 当将一个空字符串传递给它时,我们分别获得形式为(){}的函数,无论使用什么参数调用它,它都会返回undefined ,这里将使用数组- ['', raw: ['']]调用。 这与Function('')('')大致相同


此代码将输出什么?

 function f(a, b, c) { 'use strict'; return f.length; } console.log(f(100, 2)); a) undefined b) 2 c) 3 d)  

答案+解析

c)3
关于MDN的详尽描述:
length属性是函数对象的属性,它指示函数期望多少个参数,即形式参数的数量。 此数量不包括残留参数。


结果如何?

 const dict = {}; dict[[1]] = 2; dict[dict] = 3; dict[1 / 0] = 4; a) {'1': 2, '[object Object]': 3, 'Infinity': 4} b) Assignment to constant variable c) {'[1]': 2, 'dict': 3, '1/0': 4} d) {'1': 4, '[object Object]': 3} 

答案+解析

a){'1':2,'[[Object Object]':3,'Infinity':4}
错误Assignment to constant variable将不在此处,因为 const不允许更改链接,但是您可以修改对象。 所有对象键都必须是字符串,因此将为每个对象调用toString 。 将该数组强制转换为1 ,将对象强制转换为[object Object] ,然后除以零, Infinity获得Infinity


此代码将输出什么?

 console.log(!![] > [], ![] == []); a) false false b) false true c) true true d) true false 

答案+解析

c)真实真实
比较> >= <= < -导致算术比较,首先将数组转换为布尔值并得到true,然后得到比较1> 0,这显然给出了true。 在问题的第二部分,我们将数组强制转换为false ,然后将false0 ,并将数组强制转换为基本类型,我们得到一个空字符串'' ,它们相等。


至此我们的分析结束了,谢谢您的关注!

Source: https://habr.com/ru/post/zh-CN431744/


All Articles