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 .0
steht 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 object
Nicht 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 object
Enthä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, .0
das 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.k
wird 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 array
iteriert es über Elemente.
Im Fall von object
iteriert es über Schlüssel.
In diesem Szenario versucht der Babelyfier, Schlüssel zu extrahieren, number
indem er die own property call
fehlenden Objekte überprüft, number
damit 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-value
Paaren definiert werden können, erweitert werden können. In Bezug auf Object
nennen wir Schlüssel-Wert-Paar als Objekteigenschaft und seinen Wert, während arrays
wir 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 arr1
durch '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{}