Analyse de la finale du concours de quiz sur le stand hh.ru au # HolyJS18

Bonjour, c'est la dernière partie de l'analyse des questions de notre stand.


Réagissez aux questions ici .


Analyse des quatre premiers tours ici .



Ici, les questions sur des sujets ne sont pratiquement pas regroupées, nous analysons tout un par un.


C'est parti:


Quel sera le résultat?

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

Réponse + analyse

b) 11
Ici, tout est assez simple. C'est plus une question de pleine conscience. Le cycle sera exécuté 11 fois, car nous ne sommes pas stricts
supérieur à > et supérieur ou égal à >= .


Quel sera le résultat?

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

Réponse + analyse

a) 0
L'astuce ici est que {} sera interprété non pas comme un objet, mais comme un bloc de code vide. Par conséquent, l'expression est convertie en +[] , et ceci est 0 , car + avant que la valeur ne la convertisse en nombre. Je voudrais noter que si le code est écrit en tant que console.log({} + []); , alors ce sera [object Object] , car ici {} sera interprété comme un objet.


Quel sera le résultat?

 [] + {}; 

a) 0
b) nul
c) '[objet Object]'
d) NaN


Réponse + analyse

c) '[objet Object]'
Ici, les deux opérandes sont, selon les règles, réduits à une chaîne dans un tableau vide - c'est une chaîne vide, et dans [object Object]


Que produira ce code?

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

Réponse + analyse

d) fonction
Le prototype de chaîne a une méthode de lien , donc la bonne réponse est la function


Que produira ce code?

 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 

Réponse + analyse

b) FUS DAH! RO
Ici, nous déclenchons un click programme, et il pénètre dans la pile d'appels, le premier gestionnaire est déclenché - nous FUS , nous arrivons au second - nous ajoutons RO à la file d'attente, car click toujours sur la pile - n'appelez pas promesse. Nous entrons dans le prochain gestionnaire - sortie DAH! . click travaillé, la file d'attente est vide, la promesse est déclenchée.


Qu'est-ce que ce code affichera lorsqu'un bouton sera cliqué?

 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 

Réponse + analyse

a) FUS RO DAH!
Ici, l'utilisateur clique sur le bouton, il n'y a donc pas de click sur la pile, et dans le deuxième gestionnaire, la promesse fonctionnera immédiatement.


Que produira ce code?

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

Réponse + analyse

d) «non défini»
Lorsque vous utilisez des littéraux de modèle après le nom de la fonction, il est appelé avec un tableau, où il y a une valeur transmise et un tableau avec une valeur raw . Function , identique au new Function constructeur new Function - new Function . Lorsque vous lui passez une chaîne vide, nous obtenons une fonction de la forme (){} , respectivement, quel que soit l'argument que nous l'appelons, elle retournera undefined , ici elle est appelée avec un tableau - ['', raw: ['']] . C'est à peu près la même chose que Function('')('')


Que produira ce code?

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

Réponse + analyse

c) 3
Description exhaustive avec MDN :
La propriété length est une propriété d'un objet fonction et indique le nombre d'arguments attendus par la fonction, c'est-à-dire le nombre de paramètres formels. Ce montant ne comprend pas les paramètres résiduels.


Quel sera le résultat?

 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} 

Réponse + analyse

a) {'1': 2, '[Object object]': 3, 'Infinity': 4}
Erreurs L' Assignment to constant variable sera pas là car const ne permet pas de changer le lien, mais vous pouvez modifier l'objet. Toutes les clés d'objet doivent être des chaînes, donc toString est appelé pour chacune d'entre elles. Le tableau est converti en 1 , l'objet en [object Object] , et lorsqu'il est divisé par zéro, Infinity obtenu.


Que produira ce code?

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

Réponse + analyse

c) vrai vrai
Les comparaisons > >= <= < - provoquent une comparaison arithmétique, nous convertissons d'abord le tableau en une valeur booléenne et obtenons la vérité, puis nous obtenons une comparaison 1> 0, ce qui donne évidemment la vérité. Dans la deuxième partie de la question, nous convertissons le tableau en false , puis false est false en 0 , et le tableau est converti en primitive, nous obtenons une chaîne vide '' , et ils sont égaux.


Ceci conclut notre analyse, merci de votre attention!

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


All Articles