Maison  >  Article  >  interface Web  >  s'évanouir! Question d'entretien console.log(([][[]] + [])[+!![]]+([]+{})[+!![]+ + !![]]) affiche quoi

s'évanouir! Question d'entretien console.log(([][[]] + [])[+!![]]+([]+{})[+!![]+ + !![]]) affiche quoi

藏色散人
藏色散人avant
2023-04-12 15:29:22919parcourir
Cet article vous apporte des connaissances pertinentes sur le front-end. Il partage principalement avec vous une question d'entretien sur console.log. Les amis intéressés peuvent y jeter un œil ci-dessous.

Avant-propos

Questions d'entretien console.log(([][[]] + [])[+!![]]+([]+{})[+!![]+ + !![]]) Quel est le résultat ? J'ai rencontré cette question d'entretien au cours de l'entretien. La question d'entretien portait sur la conversion de type, la conversion de type implicite, les opérateurs, etc. Ce n'est pas que je ne sais pas comment y répondre. je viens de lire la question. Cependant, il s'agit bien d'une question d'entretien, alors essayez de la résoudre.

sévanouir! Question dentretien console.log(([][[]] + [])[+!![]]+([]+{})[+!![]+ + !![]]) affiche quoi

Connaissances requises pour résoudre ce problème

  • "+": unaire + effectuera la même conversion que l'utilisation de Number()
  • Si le signe + est l'addition de deux nombres, l'un ou l'autre opérande est un objet ou un value ou Boolean, appelez leur méthode toString pour la convertir en chaîne
  • "!" : non-opérateur, cette opération renvoie toujours une valeur booléenne
  • "!!": conversion forcée en valeur booléenne

pour résoudre ce problème problème ([] [[]] + [])[+!![]]+([]+{})[+!![]+ + !![]]

Nous devons d'abord clarifier son ordre d'exécution

Exécutez d'abord ([][[]] + []), exécutez d'abord le [][[]] à l'intérieur, puis calculez [ ][[]], il exécute en fait la valeur avec la clé [] dans le tableau vide []([][[]] + []),先执行里面的[][[]],在计算 [][[]]时,其实就是执行[]空数组里面key为[]的值

  1. 首先,JavaScript 引擎解析空数组 []。空数组没有任何元素。
  2. 接下来,引擎尝试使用 [] 作为属性名来访问空数组的属性。在这种情况下,由于 [] 本身是一个数组,JavaScript 引擎会尝试将其转换为字符串。由于 [] 为空数组,转换成字符串后结果为一个空字符串 ""
  3. 最后,引擎会尝试访问空数组中名为 "" 的属性。由于这个属性并不存在于空数组中,所以结果为 undefined

所以,执行 [][[]] 的结果是 undefined

那么([][[]] + [])接下去执行就是(undefined + []) 将会执行隐式类型转换,将undefined转换为字符串"undefined",将[]转为“”,然后将两个字符串拼接在一起。因此,结果是"undefined"

其次执行[+!![]],!![]空数组转布尔值为true,一元操作服+会转为数值,+true就是将true转换为数字1。得到的结果就是[1]。于是我们就可以得到([][[]] + [])[+!![]]undefined[1]这个的结果就是字符串'n'

接下来就是执行([]+{})[+!![]+ + !![]] 这一部分,再将这部分的结果和上面的结果相加

  1. 先执行([]+{}),  计算[]+{}。这将触发隐式类型转换,将空对象转换为字符串"[object Object]",然后将两个字符串拼接在一起。因此,结果是'[object Object]'

  2. 再执行[+!![]+ + !![]], +!![]前面有解析过得到的是1,所以这一部分执行过后得到的是数值1相加1+1,得到的结果是[2]

  3. 那么这两部分合起来就是'[object Object]'[2],就是字符串的第三个值b

最后将前面部分得到的结果 'n' 和后面部分得到的结果 'b' 相加,得到最后的结果'nb'

总结:这个题目一时解决不了的话,可能有以下几个原因,第一个就是不太清楚执行顺序,其次就是不太理解[][[]]这个,实际上就是获取空数组key为[]的值,又因为数组的key为字符串,所以会将[]转为''

    Tout d'abord, le moteur JavaScript analyse le tableau vide []. Un tableau vide ne contient aucun élément.

    Ensuite, le moteur tente d'accéder aux propriétés du tableau vide en utilisant [] comme nom de propriété. Dans ce cas, puisque [] lui-même est un tableau, le moteur JavaScript tentera de le convertir en chaîne. Puisque [] est un tableau vide, le résultat après conversion en chaîne est une chaîne vide "".
    Enfin, le moteur tentera d'accéder à la propriété nommée "" dans le tableau vide. Puisque cette propriété n'existe pas dans le tableau vide, le résultat est undefined.

Ainsi, le résultat de l'exécution de [][[]] est indéfini. 🎜🎜Ensuite, la prochaine exécution de ([][[]] + []) est (undefined + []) qui effectuera une conversion de type implicite et convertira Convertissez undéfini en chaîne "undéfini", convertissez [] en "", puis concaténez les deux chaînes ensemble. Par conséquent, le résultat est "undefined"🎜🎜🎜Ensuite, exécutez [+!![]], le tableau vide !![] sera converti en une valeur booléenne de true, et le service d'opération unaire + sera converti en valeur numérique, +true consiste à convertir true en nombre 1. Le résultat est [1]. Nous pouvons donc obtenir ([][[]] + [])[+!![]] sous la forme undefined[1]. Le résultat est la chaîne . 'n'🎜🎜🎜L'étape suivante consiste à exécuter ([]+{})[+!![]+ + !![]] puis à ajouter les résultats de cette partie aux résultats ci-dessus🎜
    🎜🎜Exécutez d'abord ([]+{}) et calculez []+{}. Cela déclenche une conversion de type implicite, convertissant l'objet vide en chaîne "[object Object]", puis concaténant les deux chaînes ensemble. Par conséquent, le résultat est '[object Object]'. 🎜🎜🎜🎜Exécutez à nouveau [+!![]+ + !![]], +!![] a déjà été analysé et a obtenu 1, donc la valeur obtenue après l'exécution de cette partie est un valeur numérique L'ajout de 1 à 1+1 donne [2]. 🎜🎜🎜🎜Ensuite, les deux parties combinées sont '[object Object]'[2], qui est la troisième valeur b de la chaîne🎜🎜
🎜Enfin, la partie précédente est obtenue Le résultat 'n' est ajouté au résultat 'b' obtenu dans la partie suivante pour obtenir le résultat final 'nb'🎜🎜Résumé : Cette question Si elle ne peut pas être résolue pour le moment, il peut y avoir plusieurs raisons. La première est que la séquence d'exécution n'est pas claire, et la seconde est que le [][[]] ne l'est pas. compris. En fait, il s'agit d'obtenir la clé du tableau vide comme valeur de [], et parce que la clé du tableau est une chaîne, convertira [] en '', donc il est introuvable. Connaissez-vous cette question d’entretien maintenant ? 🎜🎜Apprentissage recommandé : "🎜Tutoriel vidéo sur le développement front-end Web🎜"🎜🎜🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer