我有以下小提琴http://jsfiddle.net/kc11/h6nh1gvw/1/。我对JS没有经验。
我明白了;
alert(JSON.stringify(getCarData()[0]));
产生:
{"car":"Mercedes A 160","year":2006,"available":true,"comesInBlack":"yes"}
但:
alert(JSON.stringify(getCarData())[0]);
产生
[
有人能用简单的英语解释这里发生了什么吗?直觉上我觉得第二个操作也可以用于生成第一个JSON记录。
答案 0 :(得分:2)
在您提供的第一行代码中,您将序列化对象并将结果作为JSON字符串获取。第二个例子,你似乎试图将该对象视为一个数组,并序列化该数组的第一个元素。
假设是这种情况,您需要将代码中括号的位置更改为:
alert(JSON.stringify(getCarData()[0]));
你写的内容实际上只是从返回的JSON字符串中取出第一个字符(即" [")。因此你得到的输出。
另一件值得注意的事情是,当你索引一个对象时,你不会得到你期望的东西。您可能应该指定希望序列化的属性名称,例如:
alert(JSON.stringify(getCarData()["car"]));
你明白了。祝你好运!
答案 1 :(得分:2)
假设JSON.stringify
没有抛出错误,JSON.stringify(foo)
的结果是 String ,请调用此str
,所以
JSON.stringify(getCarData())[0];
// same as
JSON.stringify(foo)[0]; // foo = getCarData()
// same as
str[0];
因此,在此使用[0]
,您将从 String 中获取第一个字符。如果您字符串化 数组
"["
现在我们理解这一点,让我们回顾JSON.stringify(foo[0])
,假设foo
类似于。
这里[0]
选择数组索引为0
的项目,让我们调用此item
,所以
JSON.stringify(getCarData()[0]);
// same as
JSON.stringify(foo[0]); // foo = getCarData()
// same as
JSON.stringify(item);
// so we end up with
str2; // not the same as str
这次我们用 JavaScript em> stringify on(在您的情况下,它是 Object )
答案 2 :(得分:2)
getCarData()
是一个对象数组。
getCarData()[0]
是此对象数组的第一个对象,因此可以进行字符串化。
JSON.stringify(getCarData()[0])
将返回对象数组的第一个对象的字符串。
JSON.stringify(getCarData())
将返回整个对象数组的字符串。
JSON.stringify(getCarData())[0]
将返回上述命令生成的字符串的第一个字母,即[
,因为您基本上做的是像"hi"[0]
这样的字符,而之前你做的是{"hi","hello"}[0]
这是一个字符串元素。
答案 3 :(得分:2)
让我们分解alert(JSON.stringify(getCarData())[0]);
正在尝试做的事情。
记得PEMDAS?我们基本上都在做同样的事情。
最深的括号调用是getCarData()
,它返回数组。
接下来,您在该数组上调用JSON.stringify()
,该数组返回一个字符串。
最后,你调用[0]
,它有效地抓住了该字符串的第一个字符。
答案 4 :(得分:1)
两个操作顺序之间存在根本区别,我将在下面解释。
<强> TLDR 强> 第一次调用JSON.stringify()可以获取所需的汽车数据,然后对其进行字符串化,而第二种方法是对包含汽车数据的对象数组进行字符串化,然后尝试访问该字符串中的第一个元素,这是第一个该字符串的字符。
让我们分解以下几行:
alert(JSON.stringify(getCarData()[0]));
第一
getCarData()
返回并且在位置0处有一个对象的数组。[0]说给我getCarData()返回的汽车数据数组中的第一项。
然后将此对象传递给JSON.stringify()函数进行字符串化。这可以按预期的方式返回:
{"car":"Mercedes A 160","year":2006,"available":true,"comesInBlack":"yes"}
您进行的第二次字符串化调用:
alert(JSON.stringify(getCarData())[0]);
获取汽车数据(以数组形式返回)并将其传递给JSON.stringify函数。
JSON.stringify(getCarData())
这将返回包含汽车数据的对象数组。然后JSON尝试对数组进行字符串化,并返回
[{"car":"Mercedes A 160","year":2006,"available":true,"comesInBlack":"yes"},{"car":"Citroen C4 Coupe","year":2008,"available":false,"comesInBlack":"yes"},{"car":"Audi A4 Avant","year":2011,"available":true,"comesInBlack":"no"},{"car":"Opel Astra","year":2004,"available":false,"comesInBlack":"yes"},{"car":"BMW 320i Coupe","year":2011,"available":false,"comesInBlack":"no"}]
接下来,您尝试访问此字符串化数组中的第一项,但由于它现在是一个字符串(不是数组),它只返回[,字符串的第一个字符。
总结
你做的第一种方法是获取你想要的数据,然后将其字符串化,而第二种方式是包含汽车数据的对象数组,然后尝试访问字符串中的第一个元素,这是第一个字符字符串。