Ich habe gerade {....0}im Code eines Freundes gefunden . Die Auswertung in der Konsole gibt zurück {}(leeres Objekt).
Warum das? Was bedeuten 4 Punkte in JavaScript?
Ich habe gerade {....0}im Code eines Freundes gefunden . Die Auswertung in der Konsole gibt zurück {}(leeres Objekt).
Warum das? Was bedeuten 4 Punkte in JavaScript?
Antworten:
Vier Punkte haben eigentlich keine Bedeutung. ...ist der Spread-Operator und .0steht für 0.0.
Das Verteilen von 0 (oder einer beliebigen Zahl) in ein Objekt ergibt daher ein leeres Objekt {}.
Spreading 0 (or any number) yields an empty objectNicht unbedingt, wenn Sie eine Zahl an einer anderen Stelle als einem Objekt verteilen, wird ein Fehler ausgegeben, z. B. [... 0] wird ein Fehler ausgegeben.
Spreading 0 (or any number) in object literal yields an empty objectEnthält weitere nützliche Informationen ..
Drei Punkte in einem Objektliteral sind eine Ausbreitungseigenschaft , z.
const a = { b: 1, c: 1 };
const d = { ...a, e: 1 }; // { b: 1, c: 1, e: 1 }
Der letzte Punkt mit einer 0 ist ein Zahlenliteral, .0das mit identisch ist 0.0. Deshalb dies:
{ ...(0.0) }
verteilt alle Eigenschaften des Zahlenobjekts auf das Objekt. Da Zahlen jedoch keine (eigenen) Eigenschaften haben, erhalten Sie ein leeres Objekt zurück.
Function (function x() {}), (x.k = 'v'), ({...x})// {k: 'v'}, aber nicht fürNumber (x = 10), (x.k = 'v'), ({...x}) // {}
x.kwird verloren gehen.
In einfachen Worten erweitert der {...}Spread-Operator in Javascript ein Objekt / Array um ein anderes.
Wenn der Babelifier versucht, sich gegenseitig zu erweitern, muss er feststellen, ob er versucht, ein Array oder ein Objekt zu erweitern.
Im Fall von arrayiteriert es über Elemente.
Im Fall von objectiteriert es über Schlüssel.
In diesem Szenario versucht der Babelyfier, Schlüssel zu extrahieren, numberindem er die own property callfehlenden Objekte überprüft, numberdamit ein leeres Objekt zurückgegeben wird.
Mit dem Spread-Operator {...}können iterables erweitert werden. Dies bedeutet, dass die Datentypen, die in Form von key-valuePaaren definiert werden können, erweitert werden können. In Bezug auf Objectnennen wir Schlüssel-Wert-Paar als Objekteigenschaft und seinen Wert, während arrayswir in Bezug auf Index als Schlüssel und Element im Array als seinen Wert denken können.
let obj = { a: 4, b: 1};
let obj2 = { ...obj, c: 2, d: 4}; // {a: 4, b: 1, c: 2, d: 4}
let arr1 = ['1', '2'];
let obj3 = { ...arr1, ...['3']}; // {0: "3", 1: "2"}
In Bezug auf das Array ersetzt es hier das Element '1' von arr1durch '3', da beide den gleichen Index in unterschiedlichen Arrays haben.
Bei zu breiten Zeichenfolgen gibt der Operator ein nicht leeres Objekt zurück. Da Zeichenfolge ein Zeichenarray ist, wird Zeichenfolge als Array behandelt.
let obj4 = {...'hi',...'hello'} // {0: "h", 1: "e", 2: "l", 3: "l", 4: "o"}
let obj5 = {...'y',...'x'} // {0: "x" }
Bei anderen primitiven Datentypen wird jedoch ein leeres Objekt zurückgegeben
mit Zahlen
let obj6 = { ...0.0, ...55} // {}
mit Boolean
let obj7 = { ...true, ...false} // {}
Zusammenfassend lässt sich sagen, dass die Datentypen, die bei Verwendung mit dem Spread-Operator in Form von Schlüssel-Wert-Paaren behandelt werden können, ein {...}nicht leeres Objekt zurückgeben, andernfalls ein leeres Objekt{}