在javascript中,字符串数组不返回预期的行为
In javascript stringify array does not return expected behavior
我从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] = x
或this.state.push(x)
向其中添加元素。
Javascript没有关联数组。当您编写this.state["temp"]=25;
时,您正在为Array对象设置一个属性。您没有向数组本身添加任何内容。现在this.state
将有一个属性,您可以通过this.state.temp
或this.state['temp']
访问它,但它不会出现在数组本身中,因为它没有添加到数组中。
如果希望状态为数组,则需要使用push
:
this.state.push({"temp":25, "thermState": "Notte"});
相关文章:
- 连续两页返回Javascript
- 返回Javascript中字符串的特定部分
- 返回 JavaScript 类值而不是对象引用
- 返回JavaScript函数中的值
- 基本否则如果并返回JavaScript
- 如何让php“json_encode”返回Javascript数组而不是Javascript对象
- 函数内部的函数vs函数返回JavaScript中的函数
- 返回Javascript中给定正则表达式的文本范围数组
- 返回javascript中regex字符串的一部分
- 返回javascript对象中的最大值
- AJAX请求返回Javascript获胜't返回特定函数,但将返回其他函数
- 检测数组的所有函数何时返回:javascript
- 函数,返回javascript中两个字符串数组的差值
- 返回javascript数组中具有最低值的对象
- 返回javascript中最匹配的数组项
- 试图理解返回javascript方法的服务器响应
- 获取 Checked Checbox 的值返回 JavaScript/ASP.NET VB 中未定义的值
- 如何在金字塔/塔中返回 JavaScript
- 返回 javascript 中数组的数字
- 返回 JavaScript 对象警报“未定义”