Imlementacja iteratora, czemu [Symbol.iterator] jest w nawiasach?

0
let timestampForeverIterator = {
    [Symbol.iterator]: () => ({
        next: () => ({
            done: false,
            value: Date.now()
        })
    })
}

Wyżej przedstawiona jest prosta implementacja iteratora. Czemu jednak Symbol.iterator jest w nawiasach? Do czego służą te nawiasy?

I tutaj jeszcze przykład z typem Symbol:

const a = "pet";
const sym1 = Symbol();

const ob = {
    [a] : "pies",
    [sym1] : "nowa ważna wartość",
};

console.log( ob[a], ob.pet, ob["pet"],  ); //"pies", "pies", "pies"

//W przypadku symbolu nie znamy wartości, jedyną możliwością jest użycie danego symbolu
console.log( ob[sym1] ) //"nowa ważna wartość"

Dlaczego sym1 tutaj też jest w nawiasach?

2

bo bez nawiasów tworzysz klucz o tej nazwie, zamiast przypisać do klucza o tej wartości (bo cudzysłowy są opcjonalne), np:

const foo = 'bar';

let a = { foo: 5 };
let b = { [foo]: 5 };

a
{foo: 5}
b
{bar: 5}

czyli próbując bez nawiasów próbowałbyś stworzyć obiekt z własnością o nazwie "Symbol.iterator" zamiast przypisać symbol (tylko że to niemożliwe bo nie można używać kropki w nazwach własności)

1 użytkowników online, w tym zalogowanych: 0, gości: 1