Przejdź do głównej zawartości

Bug #070

🪲 Znajdź buga

console.log([, , ,].length)
console.log([, , ,].toString())

Jaka liczbowa długość tablicy i jaka ilość przecinków jako ciąg znaków zostanie zalogowana do konsoli?

🧪 Rozwiązanie

console.log([, , ,].length) // 3
console.log([, , ,].toString()) // ,,

Tablica [, , ,] to tablica z pustymi, niezdefiniowanymi slotami.

Tworząc tablicę np. [1, 2, , 4], definiujemy tablicę z 4 elementami, z czego trzecią wartością jest undefined.

Gdy dostawimy kolejny przecinek na końcu [1, 2, , 4,], nie spowoduje on utworzenie kolejnego, piątek elementu tablicy.

Zamiast tego zostanie zignorowany, ze względu na własność JavaScript zwaną końcowym przecinkiem (trailing comma).

Zapisując tą samą tablicę w inny sposób, umieszczając każdy element w nowej lini, końcowy przecinek nabiera więcej sensu.

[
1,
2,
,
4,
]

Dla wygody dopisywania kolejnych elementów w takim zapisie, końcowy przecinek nie wprowadza nowego elementu, a jest jedynie częścią spójnego zapisu każdego z elementów z tablicy.

JavaScript ignoruje więc końcowy przecinek i nie traktuje go jako rozdzielacz elementów.

Tablica [, , ,], ma więc długość (liczbę elementów) równą 3.

Taką samą długość będzie miała tablica bez pustych wartości, przykładowo [1, 2, 3,].

Dla uproszczenia można zadać sobie pytanie - ile przecinków jest potrzebnych do rozdzielenia N elementów.

Będzie to zawsze wartość o 1 mniejsza niż liczba elementów.

Konwersja tablicy [, , ,] do ciągu znaków wyraźnie to pokazuje, logując do konsoli ciąg znaków składający się z dwóch przecinków (w tablicy są 3 elementy, a 3 minus 1 daje nam 2 przecinki rozdzielające).

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js