2012-05-17 3 views
1

Я работаю над отладкой некоторого javascript и продолжаю работать в javascript [object] (например, когда я показываю предупреждение со значением, оно dsplays как [object] или NaN). Я пытаюсь прочитать содержимое этого объекта. Я знаю на Java, это была бы идеальная работа для deepToString(); Есть ли какой-либо javascript, эквивалентный этому методу?Есть ли JavaScript-эквивалент JavaTextString()?

Вот код создания вышеупомянутого объекта ...

e = document.getElementById("contServer"); // contServer is an integer variable 
var valueCS = parseInt(e.options[e.selectedIndex].value); 
    //Value CS is a four-byte variable calculated from e 

Любые идеи для яваскрипта пути к «расшифровывает» этой переменной объекта, так что я могу увидеть, что это на самом деле внутри?

Благодаря

+6

При входе объекта в консоль, 'console.log', вы можете проверить объект. – xbonez

+0

код, который у вас выше, должен выводить целое число или строку в javascript, вы говорите, что он выводит объект? – Huangism

+0

Вы используете Javascript-библиотеку? Например, в extjs вы можете выполнить Ext.util.JSON.decode (document.getElementById ("contServer")); – Victor

ответ

-1

ИТАК после просмотра исходного кода HTML

<select id="contServer" name="contServer"> 
     <option valueCS=1000>Up</option> 
     <option valueCS=0>Down</option> 
    </select> 

это недопустимый HTML, ниже, как вариант должен выглядеть

<option selected="selected" value="1000">Up</option> 

если вы делаете то же код это вернет 1000 , который является атрибутом стоимости

если у вас есть что-то вроде ниже

<option selected="selected" value="0">1000</option> 

ваш код вернет 0, потому что значение равно 0.Это должно помочь вам скорректировать наш код.

+0

Это должен был быть комментарий – xbonez

+0

Я думаю, что все остальные ответы отсутствуют. – Huangism

2

Используйте функцию JSON.stringify() для вывода вашего объекта в виде строки JSON

3

Там, кажется, некоторое замешательство при работе с select элементами.

Убедитесь, что ваш иметь правильную разметку:

​<select id="contServer"> 
    <option value="0">Zero</option> 
    <option value="10">Ten</option> 
    <option value="100" selected>Hundred</option> 
    <option value="1000">Thousand</option> 
</select>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ 

Мы сохраняем наше значение атрибута из option элементов value. Если этого атрибута нет, то value будет текстом, который находится в теге открытия option и закрывающей теге option.

Далее, значения «целого», подобные приведенным выше, фактически не являются целыми числами - они являются строками. И как таковые, они должны разбираться прежде, чем их можно будет использовать для любой математики. В кратком проходе ниже я объясняю процесс захвата выбранного значения и разбора его на целое число. Пожалуйста, прочтите его прилежно, и я думаю, что это прояснится много путаницы:

// We now have a reference to the select object (with all of its object members) 
var cServer = document.getElementById("contServer"); 

// Now we have a reference to all of the options within the select object 
var options = cServer.options; 

// Now a reference to the selected option 
var selected = options[ cServer.selectedIndex ]; 

// And now the value of the selected option 
var selValue = selected.value; 

// Let's get the type of this value 
var selType = typeof selValue; 

// Convert this String to an Integer 
var iSelType = parseInt(selType, 10); 

// We can also get the value from the select object itself 
var cServerVal = cServer.value; 

// But we would still need to parse it to an integer 
var iCServerVal = parseInt(cServerVal, 10); 

Я считаю вашу проблему с NaN исходит от попытки разобрать без числового значения. Например, мы мы должны были попытаться разобрать слово в целое:

parseInt("Hundred"); 

Результат будет NaN. Вероятно, это случилось с вами. Убедитесь, что вы сохранили свои номера либо между тегами option, либо в пределах атрибута value на каждом из тегов option.

+0

Я проголосовал за то, что сценарий, который он надел, должен выводить объект – Huangism

+0

@Huangism OP сказал, что это была проблема. Он пытается преобразовать объект в строку, которую можно прочитать. – Sampson

+0

true, но если вы посмотрите на его код, он просто путается с тем, почему он не возвращает желаемый результат. – Huangism

1

В JavaScript нет встроенного «объекта-самосвала». Быстрый и простой способ, как говорили другие, - JSON.stringify(). Если вам нужно какое-то разнообразие &, чтобы выгнать его в старую школу ... вы можете использовать рекурсивную функцию, которая делает for (var key in obj) {}.

я тотализатор что-то вроде этого со мной в моей JS инструментарии ...

var MAX_DUMP_DEPTH = 10; 
function dumpObj(obj, name, indent, depth) { 
    if (depth > MAX_DUMP_DEPTH) { 
     return indent + name + ": Over Max Depth\n"; 
    } 
    if (typeof obj == "object") { 
     var child = null; 
     var output = indent + name + "\n"; 
     indent += "\t"; 

     for (var item in obj) { 
      try { 
       child = obj[item]; 
      } catch (e) { 
       child = "wtf was that?"; 
      } 

      if (typeof child == "object") { 
       output += dumpObj(child, item, indent, depth + 1); 
      } else { 
       output += indent + item + ": " + child + "\n"; 
      } 
     } 
     return output; 
    } else { 
     return obj; 
    } 
Смежные вопросы