[js, json] bug v porovnání dat z localStorage a string

Webdesign, HTML, CSS, Flash, PHP, ASP, .NET, JavaScript. Kritika www stránek na Smetišti.

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod ReZetFet 24. 6. 2015 16:50

Ahoj, buď mám někde chybu kterou nejsem s to odhalit nebo je někde chyba:
Kód: Vybrat vše
// JavaScript Document

var defaultColorScheme = '{"asideBackgroud":"#fff", "asideColor":"#000", "sectionBackgroud":"#eee", "sectionColor":"#111"}';
if (!localStorage.colorScheme) {
    localStorage.setItem('colorScheme', JSON.stringify(defaultColorScheme));
}
var getColor = localStorage.getItem('colorScheme');
var colors = JSON.parse(getColor);
var colors2 = JSON.parse(defaultColorScheme);   // del

alert (colors.asideBackgroud+" -- "+ colors2.asideBackgroud);
if (defaultColorScheme === colors) {
  alert("jo");
}

if (!isJson(colors2)) {
  alert(colors);
  alert(getColor);
}
function isJson(str) {
    try {
        JSON.parse(str);
    } catch (e) {
        return false;
    }
    return true;
}
//localStorage.clear();

Nevíte?
Díky

EDIT: nebo je to předdefinováním var proměnných v době inicializace?
Naposledy upravil ReZetFet dne 24. 6. 2015 18:18, celkově upraveno 1
ReZetFet
Junior

Odeslat příspěvekod Just_jo 24. 6. 2015 17:40

Pro hledání chyb se hodí dělat zápisy do konzole ( např výpis proměnné 'defaultColorScheme' a 'colors' )

Není chyba u porovnání (defaultColorScheme === colors) ? Porovnáváš string oproti array - navíc typově
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod ReZetFet 24. 6. 2015 18:02

Kód: Vybrat vše
alert(typeof colors + " " + colors);
//string {"asideBackgroud":"#4f4b92", "asideColor":"#eae9f2", "sectionBackgroud":"#f7f7f2", "sectionColor":"#7a7a8c"}
alert(typeof colors2 + " " + colors2);
//object [object Object]
alert(typeof defaultColorScheme + " " + defaultColorScheme);
//string {"asideBackgroud":"#4f4b92","asideColor":"#eae9f2","sectionBackgroud":"#f7f7f2","sectionColor":"#7a7a8c"}
alert (colors.asideBackgroud+" -- "+ colors2.asideBackgroud);
//undefined -- #fff
alert (colors.asideBackgroud+" -- "+ defaultColorScheme.asideBackgroud);
//undefined -- undefined

JSON.parse ze defaultColorScheme (stringu) vytvoří object, ale z localStorage ne


Divný je, že colors a defaultColorScheme mají stejný obsah, ale
Kód: Vybrat vše
var colors = JSON.parse(getColor);
var colors2 = JSON.parse(defaultColorScheme);
alert (colors.asideBackgroud+" -- "+ defaultColorScheme.asideBackgroud);
//undefined -- undefined
alert (colors.asideBackgroud+" -- "+ colors2.asideBackgroud);
//undefined -- #fff


-- 24. 6. 2015 18:48 --

Kód: Vybrat vše
if (!localStorage.colorScheme) {
    localStorage.setItem('colorScheme', defaultColorScheme);
}

tu chybu dělá JSON.stringify(defaultColorScheme) - následně JSON.parse nevrátí to samé
ReZetFet
Junior


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků