在javascript中,stringify数组不会返回预期的行为

时间:2012-01-31 10:32:40

标签: javascript arrays json

我从javascript中得到了一个奇怪的行为,任何人都可以帮助我吗?

当我点击“测试”链接时,我会收到一个包含此字符串的警告:“[]”

我期待的是:“[{'temp':25},{'thermState':'Notte'}]”

我做错了什么?

<html>
<head>
    <script type="text/javascript" charset="utf-8" src="js/json2.js"></script>
    <script type="text/javascript" charset="utf-8">

    function test(){
        this.radioStates="";
        this.state = [];
        this.state["temp"]=25;
        this.state["thermState"]="Notte";
        alert(JSON.stringify(this.state));
    }

    </script>
</head>
<body>
<a href="#" onclick="test()">test</a>
</body>
</html>

4 个答案:

答案 0 :(得分:6)

更改为:

this.state = {}; ................

属性可以添加到对象而不是数组。

答案 1 :(得分:2)

this.state = {}; // Declare as object
this.state["temp"]=25;
this.state["thermState"]="Notte";
alert(JSON.stringify(this.state));

this.state = [];
this.state[this.state.length]= {temp: 25};
this.state[this.state.length]= { thermState: "Notte"};
alert(JSON.stringify(this.state));

第一个用作关联数组/对象,第二个用作对象数组。

答案 2 :(得分:1)

您可以通过以下方式获得预期的输出:

this.state = [];
this.state[0] = { 'temp' : 25 };
this.state[1] = { 'thermState' : "Notte" };

jsFiddle Demo producing your desired output

让我试着解释一下意想不到的行为。

在Javascript中,一切都是对象。当您编写this.state = [];时,您的this.state变量将成为一个空的Array对象。您可以通过撰写this.state[number] = xthis.state.push(x)来添加元素。

Javascript没有关联数组。当您编写this.state["temp"]=25;时,您正在Array对象上设置属性。你没有把任何东西放到数组本身。现在this.state将有一个您可以this.state.tempthis.state['temp']访问的属性,但它不会出现在数组本身中,因为它没有添加到该属性中。

答案 3 :(得分:0)

如果您希望状态为数组,则需要使用push

this.state.push({"temp":25, "thermState": "Notte"});