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 null
a 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ę null
em, 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