Właśnie znalazłem {....0}
w kodzie przyjaciela. Ocena tego w konsoli zwraca {}
(pusty obiekt).
Dlaczego? Jakie jest znaczenie 4 kropek w JavaScript?
Właśnie znalazłem {....0}
w kodzie przyjaciela. Ocena tego w konsoli zwraca {}
(pusty obiekt).
Dlaczego? Jakie jest znaczenie 4 kropek w JavaScript?
Odpowiedzi:
Cztery kropki właściwie nie mają znaczenia. ...
jest operatorem rozprzestrzeniania i .0
jest skrótem od 0.0
.
Dlatego umieszczenie 0 (lub dowolnej liczby) w obiekcie daje pusty obiekt {}
.
Spreading 0 (or any number) yields an empty object
niekoniecznie jeśli rozłożysz liczbę w jakimkolwiek innym miejscu poza obiektem, spowoduje to wyświetlenie błędu, np. [... 0] zgłosi błąd.
Spreading 0 (or any number) in object literal yields an empty object
Zawiera więcej przydatnych informacji ..
Trzy kropki w literale obiektu to właściwość spreadu , np .:
const a = { b: 1, c: 1 };
const d = { ...a, e: 1 }; // { b: 1, c: 1, e: 1 }
Ostatnia kropka z 0 to literał liczbowy, .0
czyli to samo, co 0.0
. Dlatego to:
{ ...(0.0) }
przenosi wszystkie właściwości obiektu liczbowego do obiektu, jednak ponieważ liczby nie mają żadnych (własnych) właściwości, otrzymujesz pusty obiekt.
Function
(function x() {}), (x.k = 'v'), ({...x})// {k: 'v'}
ale nie działaNumber
(x = 10), (x.k = 'v'), ({...x}) // {}
x.k
się zgubisz.
Mówiąc {...}
prościej, operator spreadu w javascript rozszerza jeden obiekt / tablicę o inny.
Tak więc, gdy babelifier próbuje rozszerzyć jeden o drugi, musi zidentyfikować, czy próbuje rozszerzyć tablicę, czy obiekt.
W przypadku array
iteruje po elementach.
W przypadku object
iteruje po kluczach.
W tym scenariuszu babelyfier próbuje wyodrębnić klucze number
, sprawdzając own property call
brakujące obiekty, number
więc zwraca pusty obiekt.
Operator rozprzestrzeniania {...}
umożliwia rozszerzanie elementów iteracyjnych. Oznacza to, że typy danych, które można zdefiniować w postaci key-value
par, można rozszerzyć. W kategoriach Object
nazywamy parę klucz-wartość jako właściwość Object i jest to wartość, podczas gdy w kategoriach arrays
możemy myśleć o indeksie jako o kluczu, a element w tablicy jako o wartości.
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"}
Jeśli chodzi o tablicę, jako klucz przyjmuje indeks, więc tutaj zastępuje element „1” arr1
z „3”, ponieważ oba mają ten sam indeks w innej tablicy.
W przypadku łańcuchów zbyt operator zwraca niepusty obiekt. Ponieważ łańcuch jest tablicą znaków, traktuje ciąg jako tablicę.
let obj4 = {...'hi',...'hello'} // {0: "h", 1: "e", 2: "l", 3: "l", 4: "o"}
let obj5 = {...'y',...'x'} // {0: "x" }
Ale w przypadku innych pierwotnych typów danych zwraca pusty obiekt
z liczbami
let obj6 = { ...0.0, ...55} // {}
z Boolean
let obj7 = { ...true, ...false} // {}
Podsumowując, te typy danych, które mogą być traktowane jako pary klucz-wartość, gdy są używane z operatorem spread, {...}
zwracają niepusty obiekt, w przeciwnym razie zwraca pusty obiekt{}