Wie wir alle wissen, ist js eine schwache Sprache. Im Gegensatz zu Java müssen Sie den Typ der Variablen deklarieren, wenn Sie eine Variable definieren. Wenn wir die Operation '+' verwenden, fügen wir normalerweise nur Zahlen hinzu oder buchstabieren sie in Zeichenfolgen, aber Es gibt auch einige Überraschungen, wie zum Beispiel:
1. Beginnen wir mit einer einfachen:
true+true
Der Ausdruck ist 2, der Grund dafür ist, dass js true in die Zahl 1 und false in 0 konvertiert, wenn es ausgeführt wird.
2. Ein weiterer Perverser:
[3,4]+[5,6]=?
Wenn Sie wissen, dass das Prinzip der Kinderschuhe mir sagt, lautet die Antwort: 3,45,6, warum ist das so?
Der Grund ist einfach: Lassen Sie uns zunächst über die Datentypen von js sprechen. Die Grundtypen sind undefiniert, null, number, string, boolean und die komplexen Datentypen Array und Object. Wenn wir die "+" - Operation ausführen:
A: Wenn es sich um eine Zahlenaddition handelt, wird die normale Additionsoperation ausgeführt;
B: Wenn eine der Additionen eine nichtstellige Zahl ist, wird sie zum Spleißen von Zeichenfolgen in einen Zeichenfolgentyp konvertiert ;
C: Wenn es sich um einen komplexen Typ handelt, verwendet Array die Methode string (), um das Array in die entsprechende Zeichenfolge zu konvertieren. Wenn es sich um ein leeres Array handelt, lautet es ". Wenn es sich beispielsweise um ein nicht leeres Array handelt , [5,6] wird in '5., 6' konvertiert. Wenn es sich um ein Objekt handelt, wird nach dem Aufrufen der Zeichenfolgenmethode '[Objekt Objekt]' zurückgegeben. Also
[3,4] + [5,6] = '3,4' + '5,6' = 3,45, 6
3. Verbesserte Abnormalität:
{a:4}+[5,6]=?
Nach der obigen Berechnungsmethode können wir schnell schließen, dass es sich um [Objekt Objekt] 5,6
{a: 4} + [5,6] = '[Objekt Objekt]' + '5,6' = [Objekt Objekt] handelt. 5, 6
4 Schauen wir uns eine Gruppe ekelhafter Ergänzungen an:
[]+{}=?
{}+[]=?
Wenn Sie es ausdrucken, werden Sie feststellen, dass das erste '[Objekt Objekt]' ist, was unserer Berechnungslogik entspricht, das zweite jedoch '0' wird (einige Browser sind normalerweise '[Objekt Objekt]'). Was ist der Grund für 0? Wenn das erste {} erneut ausgeführt wird, behandelt der Browser es als Anweisung (Deklaration). Die tatsächliche Ausführung ist + []. Wenn + [], wird die Nummer ([]) an 0 übergeben.
5. Was ist, wenn zwei leer sind? Objekte werden addiert?
{}+{}=?
Das Ausführungsergebnis einiger Browser ist '[Objekt Objekt] [Objekt Objekt]', und einige Ausführungsergebnisse sind NaN. Wenn es NaN ist, ähnelt der Ausführungsprozess Punkt 5, was der Ausführung von + Number ({}) entspricht. Das Ergebnis ist also NaN.
Zusammenfassung:
1. Nummer + Nummer = Additionsoperation wie 2 + 3 = 5 2.
Nummer + String oder String + String = String-Spleißen; 1 + 'a' = '1a'
3.Array + Objekt = String (Array) + Zeichenfolge (Objekt)
4. {} + any = Number (any)