Autor | Zpráva | ||
---|---|---|---|
quatzael Profil |
#1 · Zasláno: 1. 1. 2014, 23:44:31
Mám jednoduchý script:
for (val in defval) { sessionStorage[val] = defval[val]; } var forlen = defval.length; A z nějakého důvodu je forlen hodnota undefined. Přitom ten cyklus opravdu několikrát proběhne.. Nevíte někdo prosím kde může být chyba? |
||
Chamurappi Profil |
#2 · Zasláno: 1. 1. 2014, 23:50:09
Reaguji na quatzaela:
V tom případě nejspíš defval není pole.
|
||
Jan Tvrdík Profil |
#3 · Zasláno: 1. 1. 2014, 23:50:10
quatzael:
„Nevíte někdo prosím kde může být chyba?“ Řekl bych, že defval není pole.
|
||
quatzael Profil |
Chamurappi, Jan Tvrdík:
A co by to bylo když to má []? defval by měl být asi zpracovaný JSON, což je podle mě pole, ne? var defval = eval('(' + answer + ')'); Jan Tvrdík, Chamurappi: Aha, tak to teda není pole, ale objekt. A jak se tedy dá zjistit počet properties toho pole? |
||
Jan Tvrdík Profil |
#5 · Zasláno: 2. 1. 2014, 00:15:42
quatzael:
„A jak se tedy dá zjistit počet properties“ V prohlížečích, které podporují EcmaScript 5 by mělo fungovat. Object.keys(defval).length Viz také stackoverflow.com/questions/126100/how-to-efficiently-count-the-number-of-keys-properties-of-an-object-in-javascrip |
||
quatzael Profil |
#6 · Zasláno: 2. 1. 2014, 00:32:05
Jan Tvrdík:
díky. Akorát, že stejně asi budu muset hledat úplně jiné řešení, protože celej ten skript má nějaký další mouchy.. |
||
1Pupik1989 Profil |
Vlastnost length hlavně funguje pouze na indexované pole, čili asociativní vrátí tuším 0, pokud se tam neobjeví žádný index. Objekt vrátí undefined, čili pole to určitě není. Na Object.keys bych si dával bacha, není podpirováno všude. Počítej délku přímo v tom cyklu.
quatzael: JSON může být jak pole, tak object. var pole = JSON.parse('[1,2,3,5]'); console.log(pole,pole.length); //[1, 2, 3, 5] 4 var objekt = JSON.parse('{"a":1,"b":2,"c":3,"d":5}'); console.log(objekt,objekt.length); //Object {a: 1, b: 2, c: 3, d: 5} undefined Asociativní pole se při enkódování do JSON stringu automaticky převede na objekt. |
||
_es Profil |
#8 · Zasláno: 2. 1. 2014, 14:52:59
|
||
Chamurappi Profil |
#9 · Zasláno: 2. 1. 2014, 16:50:17
Reaguji na 1Pupika1989:
„hlavně funguje pouze na indexované pole, čili asociativní vrátí tuším 0“ Asociativní pole v JS neexistuje. Pokud někdo navěsí na Array nějaké nečíselné vlastnosti (což může udělat vesměs s jakýmkoliv objektem), nemají na nic vliv. Mohl by je stejně tak věšet třeba na Date . Pokusy o práci s Array jako s asociativním polem bývají symptomem nepochopení polí/objektů.
|
||
Časová prodleva: 5 dní
|
|||
peta Profil |
var forlen = 0; // pridano for (val in defval) { sessionStorage[val] = defval[val]; forlen++; // pridano } //var forlen = defval.length; |
||
Časová prodleva: 10 let
|
0