Análise da final do concurso de perguntas e respostas no estande da hh.ru em # HolyJS18

Olá, esta é a última parte da análise de perguntas do nosso estande.


Reaja às perguntas aqui .


Análise das quatro primeiras rodadas aqui .



Aqui, questões sobre tópicos praticamente não são agrupadas, analisamos tudo um por um.


Vamos lá:


Qual será o resultado?

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

Resposta + análise

b) 11
Tudo é bem simples aqui. Isso é mais uma questão de atenção plena. O ciclo será executado 11 vezes, porque nós não somos rigorosos
maior que > e maior que ou igual a >= .


Qual será o resultado?

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

Resposta + análise

a) 0
O truque aqui é que {} será interpretado não como um objeto, mas como um bloco de código vazio. Portanto, a expressão é convertida em +[] e é 0 , porque + antes que o valor o converta em um número. Gostaria de observar que, se o código for escrito como console.log({} + []); , então será [object Object] , porque aqui {} será interpretado como um objeto.


Qual será o resultado?

 [] + {}; 

a) 0
b) nulo
c) '[objeto Objeto]'
d) NaN


Resposta + análise

c) '[objeto Objeto]'
Aqui, os dois operandos são, de acordo com as regras, reduzidos a uma sequência de uma matriz vazia - esta é uma sequência vazia e de um objeto [object Object]


O que esse código produzirá?

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

Resposta + análise

d) função
O protótipo de string possui um método de link , portanto, a resposta correta é function


O que esse código produzirá?

 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 

Resposta + análise

b) FUS DAH! RO
Aqui, acionamos o click programaticamente, e ele entra na pilha de chamadas, o primeiro manipulador é acionado - produzimos FUS , chegamos ao segundo - adicionamos RO à fila, porque click ainda na pilha - não chame de promessa. Entramos no próximo manipulador - saída DAH! . click funcionou, a fila está vazia, a promessa é acionada.


O que esse código será exibido quando um botão for clicado?

 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 

Resposta + análise

a) FUS RO DAH!
Aqui o usuário clica no botão, para que não haja um click na pilha e, no segundo manipulador, a promessa funcionará imediatamente.


O que esse código produzirá?

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

Resposta + análise

d) 'indefinido'
Ao usar literais de modelo após o nome da função, ela é chamada com uma matriz, na qual existe um valor passado e uma matriz com um valor raw . Function , o mesmo que o new Function - construtor de funções. Ao passar uma string vazia para ela, obtemos uma função do formulário (){} , respectivamente, com qualquer argumento que a chamarmos, ela retornará undefined , aqui é chamada com uma matriz - ['', raw: ['']] . Isso é aproximadamente o mesmo que Function('')('')


O que esse código produzirá?

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

Resposta + análise

c) 3
Descrição exaustiva com MDN :
A propriedade length é uma propriedade de um objeto de função e indica quantos argumentos a função espera, ou seja, o número de parâmetros formais. Este valor não inclui parâmetros residuais.


Qual será o resultado?

 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} 

Resposta + análise

a) {'1': 2, '[objeto Objeto]': 3, 'Infinito': 4}
A Assignment to constant variable erros Assignment to constant variable não estará aqui porque const não permite alterar o link, mas você pode modificar o objeto. Todas as chaves de objeto devem ser cadeias de caracteres; portanto, toString é chamado para cada uma delas. A matriz é convertida em 1 , o objeto em [object Object] e, quando dividido por zero, o Infinity obtido.


O que esse código produzirá?

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

Resposta + análise

c) verdadeiro verdadeiro
Comparações > >= <= < - causam uma comparação aritmética, primeiro convertemos a matriz em um valor booleano e obtemos true, e depois obtemos uma comparação 1> 0, que obviamente fornece true. Na segunda parte da pergunta, convertemos o array em false , depois false é false em 0 , e o array é convertido em um primitivo, obtemos uma string vazia '' , e eles são iguais.


Isso conclui nossa análise, obrigado por sua atenção!

Source: https://habr.com/ru/post/pt431744/


All Articles