Bug #046
🪲 Znajdź buga
const myObj = {
toString: () => "orange",
valueOf: () => "apple",
}
console.log(String(myObj))
console.log("".concat(myObj))
console.log("" + myObj)
console.log(`${myObj}`)
Chcemy dokonać konwersji obiektu na ciąg znaków.
Co zalogują do konsoli zaproponowane sposoby?
🧪 Rozwiązanie
const myObj = {
toString: () => "orange",
valueOf: () => "apple",
}
console.log(String(myObj)) // orange
console.log("".concat(myObj)) // orange
console.log("" + myObj) // apple
console.log(`${myObj}`) // orange
Wszystkie sposoby, oprócz "" + myObj
, zwrócą wartość orange
.
Operator +
, jeśli zostanie użyty na typach danych, z których choć jeden jest różny niż number
, działa jako operator łączenia ciągów znaków.
"" + myObj
jest więc operacją łączenia ciągów znaków za pomocą operatora +
, czyli de facto konwersją myObj
na ciąg znaków.
Okazuje się jednak, że algorytm konwersji danych na ciąg znaków, który stosuje operator +
, różni się od pozostałych sposobów.
Operator +
dokonując konwersji danych na ciąg znaków, zamiast wywołać metodę toString()
na obiekcie, który konwertuje, w pierwszej kolejności wywołuje na nim metodę valueOf()
.
🎢 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