Heim >Web-Frontend >js-Tutorial >Interpretieren Sie den JavaScript-Code var ie = !-[1,]
var ie = !-[1,];
Dieser Code wurde vor IE9 als der kürzeste IE-Beurteilungscode der Welt bezeichnet. Obwohl der Code kurz ist, enthält er viele grundlegende JavaScript-Kenntnisse. In diesem Beispiel wird bei der Ausführung des Codes zuerst die toString()-Methode des Arrays aufgerufen. Wenn [1,].toString() ausgeführt wird, wird „1“ in IE6, 7 und 8 erhalten. Dann wird der Ausdruck zu !-"1,". Versuchen Sie dann, „1“ in einen numerischen Typ umzuwandeln, um NaN zu erhalten, und dann in ein negatives NaN, um immer noch den Wert NaN zu erhalten. Führen Sie abschließend !NaN aus und geben Sie true zurück. Lassen Sie uns das im Code enthaltene Javascript-Wissen überprüfen, indem wir diese Aussage zerlegen:
Unterschiede bei der Analyse von Browser-Array-Literalen
[1,] gibt die Verwendung von Javascript-Array-Literalen an. Die Menge definiert ein Array . In IE6, 7 und 8 besteht das Array aus zwei Elementen, und die Werte im Array sind 1 bzw. undefiniert. In Standardbrowsern wird undefiniert nach dem ersten Element ignoriert und das Array enthält nur ein Element, 1.
Die toString()-Methode des Arrays
Beim Aufruf der toString()-Methode des Array-Objekts wird die toString()-Methode für jedes Element im Array aufgerufen. Wenn der Wert des Elements NULL ist oder undefiniert ist, wird eine leere Zeichenfolge zurückgegeben, und dann werden die erhaltenen Werte jedes Elements zu einer durch Kommas "," getrennten Zeichenfolge zusammengesetzt.
Unärer Minusoperator
Wenn der Operand ein numerischer Typ ist, wird er direkt negativ gemacht. Andernfalls wird versucht, den Operanden in einen numerischen Typ umzuwandeln Der Konvertierungsprozess entspricht zunächst der Ausführung der Zahlenfunktion und dem anschließenden Negieren des Ergebnisses.
Logische NICHT-Operation
Gibt „true“ zurück, wenn der Operand NaN, NULL oder undefiniert ist, wenn eine logische NICHT-Operation ausgeführt wird.
Durch das obige Wissen können wir schließen, dass der Code var ie = !-[1,] tatsächlich äquivalent zu var ie = !(-Number([1,].toString())); im IE678 Der Wert ist wahr.