Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Переменная не могу понять в чем проблема. Как узнать тип? (https://javascript.ru/forum/misc/17682-peremennaya-ne-mogu-ponyat-v-chem-problema-kak-uznat-tip.html)

artlayers 29.05.2011 15:09

Переменная не могу понять в чем проблема. Как узнать тип?
 
Проблема такая. Есть скрипт, он строит дерево. Дерево задается в js коде так:
var elements = [{"id":0,"content":"Root","children":[{"id":1,"content":"Data 1","children":[{"id":2,"content":"Data 2","children":[{"id":3,"content":"Data 3","children":[{"id":4,"content":"Data 4","children":[]}]}]}]}]}];

Но, от руки его задавать не нужно, я такую стуктуру получаю от php файла, который ее формирует. Если взять скопировать сформированное дерево и вставить в переменную elements, то все чудесно, но если присвоить
var elements = data

, где data содержит
[{"id":0,"content":"Root","children":[{"id":1,"content":"Data 1","children":[{"id":2,"content":"Data 2","children":[{"id":3,"content":"Data 3","children":[{"id":4,"content":"Data 4","children":[]}]}]}]}]}]

то есть тоже самое, то ничего не работает.
Провел эксперимент - перевел в строку то что задаю копированием простым и то что задаю присвоением и измерил длину. Так вот, длина того что задано копированием 15, длина присвоенного 205. Если вывести содержимое, то оно идентично до символа. Где искать проблему, подскажите?

artlayers 29.05.2011 15:29

отладчиком в IE увидел тип который определяется для переменной в случае когда все работает.

С переменной elements все чудесно работает с elements1 - нет. Нужно привести к типу elements.
Как привести переменную к первому типу?

monolithed 29.05.2011 15:49

Цитата:

Сообщение от artlayers
Как привести переменную к первому типу?

у вас JSON-строка ее нужно распарсить с помощью специальных методов либо через eval();

artlayers 29.05.2011 15:52

Вы меня спасли! Спасибо!

monolithed 29.05.2011 16:01

на всякий случай:
var json =  JSON.parse('{"foo" : 0, "bar" : 1}');

for(i in json) {
   if(json.hasOwnProperty(i)) {
       alert(i + ': ' +json[i]);
    }
}


ну и или так:
var data = "{'foo' : 0, 'bar' : 1}",
    json =  eval('('+data+')');

for(var i in json) {
   if(json.hasOwnProperty(i)) {
       alert(i + ': ' +json[i]);
    }
}


Часовой пояс GMT +3, время: 23:09.