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