1

我正在调试一些 javascript,并继续运行 javascript [object](例如,当我显示带有值的警报时,它会显示为[object]NaN)。我正在尝试读取此对象的内容。我知道在 Java 中,这将是一个完美的工作deepToString();是否有任何与该方法等效的 javascript?

这是生成上述对象的代码...

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

关于“解码”这个对象变量的 JavaScript 方法的任何想法,以便我可以看到里面的实际内容?

谢谢

4

4 回答 4

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>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

我们将值存储在元素的value属性中。option如果该属性不存在,则将是位于开始标记和结束标记value的文本。optionoption

接下来,像上面这样的“整数”值实际上并不是整数——它们是字符串。因此,必须先对它们进行解析,然后才能将它们用于任何数学运算。在下面的简短演练中,我解释了获取选定值并将其解析为整数的过程。请仔细阅读它,我认为它会消除很多困惑:

// 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标签的属性内。

于 2012-05-17T19:56:54.327 回答
2

使用JSON.stringify()函数将对象输出为 JSON 字符串

于 2012-05-17T19:56:27.143 回答
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;
    }
于 2012-05-17T20:07:18.220 回答
-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,这是 value 属性

如果你有类似下面的东西

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

您的代码将返回 0,因为 value 设置为 0。这应该可以帮助您更正我们的代码

于 2012-05-17T20:01:30.393 回答