Przejdź do głównej zawartości

Bug #060

🪲 Znajdź buga

function js(...params) {
return JSON.stringify(...params)
}

console.log(js(true))
console.log(js(false))
console.log(js(null))

console.log(js(NaN))
console.log(js(Infinity))

console.log(js([1, 2, 3]))
console.log(js(new Set([1, 2, 3])))

console.log(js(undefined))
console.log(js([undefined]))
console.log(js({ prop: undefined }))

console.log(js(() => "foo"))
console.log(js([() => "foo"]))
console.log(js({ prop: () => "foo" }))

console.log(js(Symbol("foo")))
console.log(js([Symbol("foo")]))
console.log(js({ prop: Symbol("foo") }))

Dla jakich typów danych nie możemy polegać na konwersji z użyciem JSON.stringify()?

Co zostanie zalogowane do konsoli w powyższych przykładach?

🧪 Rozwiązanie

function js(...params) {
return JSON.stringify(...params)
}

console.log(js(true)) // true
console.log(js(false)) // false
console.log(js(null)) // null

console.log(js(NaN)) // null
console.log(js(Infinity)) // null

console.log(js([1, 2, 3])) // [1,2,3]
console.log(js(new Set([1, 2, 3]))) // {}

console.log(js(undefined)) // undefined
console.log(js([undefined])) // [null]
console.log(js({ prop: undefined })) // {}

console.log(js(() => "foo")) // undefined
console.log(js([() => "foo"])) // [null]
console.log(js({ prop: () => "foo" })) // {}

console.log(js(Symbol("foo"))) // undefined
console.log(js([Symbol("foo")])) // [null]
console.log(js({ prop: Symbol("foo") })) // {}

Do formatu JSON możemy skonwertować jedynie niektóre typy danych.

Ciągi znaków i wartości liczbowe nie stanowią problemu.

Podobnie wartości logiczne, true/false.

Wartość null również zostanie poprawnie skonwertowana.

Do nulla skonwertowane zostaną także wartości NaN i Infinity.

Tablice [] zostaną poprawnie skonwertowane do formatu JSON, ale kolekcje Map i Set zostaną skonwertowane do pustego obiektu {}.

Funkcje, symbole oraz wartość undefined, konwertują się różnie, w zależności od kontekstu wystąpienia.

Samodzielne wystąpienia zamieniane są na undefined. Jako elementy tablicy, stają się nullem, a jako elementy obiektu, zostają pominięte.

🎢 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