我从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>
答案 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] = x
或this.state.push(x)
来添加元素。
Javascript没有关联数组。当您编写this.state["temp"]=25;
时,您正在Array对象上设置属性。你没有把任何东西放到数组本身。现在this.state
将有一个您可以this.state.temp
或this.state['temp']
访问的属性,但它不会出现在数组本身中,因为它没有添加到该属性中。
答案 3 :(得分:0)
如果您希望状态为数组,则需要使用push
,:
this.state.push({"temp":25, "thermState": "Notte"});