Przejdź do głównej zawartości

Bug #085

🪲 Znajdź buga

console.log("foo \nbar\nbaz")
console.log('foo \nbar\nbaz')
console.log(`foo \nbar\nbaz`)
console.log(String.raw`foo ${`\nbar\nbaz`}`)
console.log(String.raw`foo \nbar \nbaz`)

Jakie wartości zostaną zalogowane do konsoli?

🧪 Rozwiązanie

console.log("foo \nbar\nbaz")
console.log('foo \nbar\nbaz')
console.log(`foo \nbar\nbaz`)
console.log(String.raw`foo ${`\nbar\nbaz`}`)
console.log(String.raw`foo \nbar \nbaz`)

Pierwsze cztery przykłady zalogują ciągi znaków w ten sam sposób:

foo
bar
baz

Niespodzianką może być ostatni, piąty przykład, który zwróci:

foo \nbar \nbaz

String.raw() zwraca literał szablonu w oryginalnej formie, bez respektowania wstecznego ukośnika jako znaku ucieczki np. dla przejść do nowej linii poprzez \n.

String.raw() respektuje jednak zagnieżdżanie literałów szablonu za pomocą ${}, wykonując je już z uwzględnieniem znaków ucieczki, stąd też przykład z czwartej linii działa tak samo jak przykład z linii trzeciej.

🎢 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