2012-02-17 56 views
1

这基本上是JSON脚本解码发生的理论问题。我是JSON和JavaScript的新手,所以正在接受教程。它给了我几个例子代码来工作。我发现这是因为我犯了一个错误。示例代码是this--JSON对象创建和JSON数组操作

<html> 
<body> 
<h2>Create Object from JSON String</h3> 
<p>First Name: <span id="fname"></span></p> 
<p>Last Name: <span id="lname"></span></p> 
<script type="text/javascript"> 
var employees = [ 
{ "firstName" : "John" , "lastName" : "Doe" }, 
{ "firstName" : "Anna" , "lastName" : "Smith" }, 
{ "firstName" : "Peter" , "lastName" : "Jones" }, ]; 
employees[1].firstName="Jonatan"; 
employees[2].lastName="Holla"; 
document.getElementById("fname").innerHTML=employees[1].firstName; 
document.getElementById("lname").innerHTML=employees[2].lastName; 
</script> 

</body> 
</html> 

我会得到以下output--

Create Object from JSON String 

First Name: Jonatan 

Last Name: Holla 

但我不小心通过修改代码的第14行犯的一个错误。而不是“lname”,我再次输入了“fname”。

document.getElementById("fname").innerHTML=employees[2].lastName; 

它提供了以下output--

Create Object from JSON String 

First Name: Holla 

Last Name: 

为什么会出现这种情况?同意第二次在fname上调用getElementId导致在“名字”字段中输出“Holla”。但是,该声明如何否定了前面的陈述的任何影响? (即第13行)?

+1

我看到它的第13行的方式首先将名字设置为“乔纳森”,你错误的行14用“霍拉”覆盖这个。姓氏留空,因为span#lname永远不会更改。对我来说这非常有意义。 – 2012-02-17 17:58:05

+1

我在代码中看不到任何JSON。只有JavaScript对象和数组。 – 2012-02-17 18:00:53

回答

2

它不会否定它,它会覆盖它。

你先说:在fname中写上“Jonatan”。然后你说在fname中写上“Holla”。所以你最终只看到“霍拉”。

而lname是空的,因为你不再设置它 - 相反,你设置fname 2次。

+0

好的,所以当脚本运行时,在输出出现在屏幕上之前,所有的.innerHTML方法都将被评估。我对吗? – 2012-02-17 17:59:33

+0

是的,这个脚本立即执行,你看到的结果是。 – Ixx 2012-02-17 18:02:12