在javascript中,字符串数组不返回预期的行为

In javascript stringify array does not return expected behavior

本文关键字:返回 javascript 字符串 数组      更新时间:2023-09-26

我从javascript中得到了一个奇怪的行为,有人能帮我吗?

当我点击"测试"链接时,我会收到一个带有以下字符串的警报:"[]"

我期待着这样的东西:"[{‘emp’:25},{‘termState’:‘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>

更改为:

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

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

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));

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

您可以说:

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

jsFiddle演示生成您想要的输出

让我试着解释一下这种出乎意料的行为。

在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']访问它,但它不会出现在数组本身中,因为它没有添加到数组中。

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

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