Heim > Artikel > Web-Frontend > schwach! Interviewfrage console.log(([][[]] + [])[+!![]]+([]+{})[+!![]+ + !![]]) gibt was aus
Interviewfragen console.log(([][[]] + [])[+!![]]+([]+{})[+!![]+ + !![]]) Was ist die Ausgabe? Ich bin während des Interviews auf diese Interviewfrage gestoßen, in der es um Typkonvertierung, implizite Typkonvertierung, Operatoren usw. ging. Es ist nicht so, dass ich nicht weiß, wie ich sie beantworten soll Ich lese gerade die Frage. Es handelt sich jedoch tatsächlich um eine Interviewfrage, also versuchen Sie, sie zu lösen.
Zuerst müssen wir die Ausführungsreihenfolge klären
Führen Sie zuerst ([][[]] + [])
aus, führen Sie zuerst den darin enthaltenen [][[]]
aus und berechnen Sie dann [ ][[]], es führt tatsächlich den Wert mit Schlüssel [] im leeren Array [] aus([][[]] + [])
,先执行里面的[][[]]
,在计算 [][[]]
时,其实就是执行[]空数组里面key为[]的值
[]
。空数组没有任何元素。[]
作为属性名来访问空数组的属性。在这种情况下,由于 []
本身是一个数组,JavaScript 引擎会尝试将其转换为字符串。由于 []
为空数组,转换成字符串后结果为一个空字符串 ""
。""
的属性。由于这个属性并不存在于空数组中,所以结果为 undefined
。所以,执行 [][[]]
的结果是 undefined
。
那么([][[]] + [])
接下去执行就是(undefined + [])
将会执行隐式类型转换,将undefined
转换为字符串"undefined"
,将[]转为“”,然后将两个字符串拼接在一起。因此,结果是"undefined"
其次执行[+!![]],!![]空数组转布尔值为true,一元操作服+会转为数值,+true就是将true
转换为数字1
。得到的结果就是[1]
。于是我们就可以得到([][[]] + [])[+!![]]
为undefined[1]
这个的结果就是字符串'n'
接下来就是执行([]+{})[+!![]+ + !![]]
这一部分,再将这部分的结果和上面的结果相加
先执行([]+{})
, 计算[]+{}
。这将触发隐式类型转换,将空对象转换为字符串"[object Object]"
,然后将两个字符串拼接在一起。因此,结果是'[object Object]'
。
再执行[+!![]+ + !![]], +!![]
前面有解析过得到的是1,所以这一部分执行过后得到的是数值1相加1+1
,得到的结果是[2]
。
那么这两部分合起来就是'[object Object]'[2]
,就是字符串的第三个值b
最后将前面部分得到的结果 'n'
和后面部分得到的结果 'b'
相加,得到最后的结果'nb'
总结:这个题目一时解决不了的话,可能有以下几个原因,第一个就是不太清楚执行顺序,其次就是不太理解[][[]]
这个,实际上就是获取空数组key为[]
的值,又因为数组的key为字符串,所以会将[]
转为''
[]
. Ein leeres Array enthält keine Elemente. Als nächstes versucht die Engine, auf die Eigenschaften des leeren Arrays zuzugreifen, indem sie []
als Eigenschaftsnamen verwendet. Da []
in diesem Fall selbst ein Array ist, versucht die JavaScript-Engine, es in einen String umzuwandeln. Da []
ein leeres Array ist, ist das Ergebnis nach der Konvertierung in einen String ein leerer String ""
.
Abschließend versucht die Engine, auf die Eigenschaft mit dem Namen ""
im leeren Array zuzugreifen. Da diese Eigenschaft im leeren Array nicht vorhanden ist, ist das Ergebnis undefiniert
.
[][[]]
ist also undefiniert
. 🎜🎜Dann ist die nächste Ausführung von ([][[]] + [])
(undefiniert + [])
, die eine implizite Typkonvertierung durchführt und konvertiert Konvertieren Sie undefiniert
in die Zeichenfolge „undefiniert“
, konvertieren Sie [] in „“ und verketten Sie dann die beiden Zeichenfolgen miteinander. Daher ist das Ergebnis "undefiniert"
🎜🎜🎜Dann führen Sie [+!![]] aus, das leere Array !![] wird in einen booleschen Wert von true konvertiert und Der unäre Operationsdienst + wird in einen numerischen Wert konvertiert, +true bedeutet, true
in die Zahl 1
umzuwandeln. Das Ergebnis ist [1]
. Wir können also ([][[]] + [])[+!![]]
als undefiniert[1]
erhalten. Das Ergebnis ist die Zeichenfolge 'n'
🎜🎜🎜Der nächste Schritt besteht darin, ([]+{})[+!![]+ + !![]]
auszuführen und dann Hinzufügen die Ergebnisse dieses Teils zu den obigen Ergebnissen🎜([]+{})
aus und berechnen Sie []+{}
. Dadurch wird eine implizite Typkonvertierung ausgelöst, bei der das leere Objekt in die Zeichenfolge "[object Object]"
konvertiert und die beiden Zeichenfolgen dann miteinander verkettet werden. Daher ist das Ergebnis '[object Object]'
. 🎜🎜🎜🎜Führen Sie [+!![]+ + !![]] erneut aus. +!![]
wurde zuvor analysiert und hat 1 erhalten, sodass der nach der Ausführung dieses Teils erhaltene Wert a ist numerischer Wert Die Addition von 1 zu 1+1
ergibt [2]
. 🎜🎜🎜🎜Dann sind die beiden Teile zusammen '[object Object]'[2]
, was der dritte Wert b der Zeichenfolge ist🎜🎜'n'
wird zum im folgenden Teil erhaltenen Ergebnis 'b'
addiert, um das Endergebnis 'nb'
🎜🎜Zusammenfassung zu erhalten : Wenn diese Frage im Moment nicht gelöst werden kann, kann dies mehrere Gründe haben. Der erste ist, dass die Ausführungsreihenfolge nicht klar ist, und der zweite ist, dass der [][[]]
nicht klar ist Tatsächlich geht es darum, den leeren Array-Schlüssel als Wert von []
zu erhalten, und da der Schlüssel des Arrays eine Zeichenfolge ist, wird []
in konvertiert ''
, daher kann es nicht gefunden werden. Rückgabe undefiniert. Kennen Sie diese Interviewfrage jetzt? 🎜🎜Empfohlenes Lernen: „🎜Web-Frontend-Entwicklungsvideo-Tutorial🎜“🎜🎜🎜Das obige ist der detaillierte Inhalt vonschwach! Interviewfrage console.log(([][[]] + [])[+!![]]+([]+{})[+!![]+ + !![]]) gibt was aus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!