当我修改以下Javascript对象代码时,为什么输出错误?

时间:2015-05-17 07:43:16

标签: javascript

这是javascript代码。

var option={
  value:'',
  desc:{
   en:'',
   hn:''
  }
};
option.value='15';
option.desc.en='hello';
option.desc.hn='world'; 

console.log(option);

option.value='25';
option.desc.hn='India';

console.log(option);

这给出了输出 -

object {value:25,object {desc:{en:"hello",hn:"India"}}}

object {value:25,object {desc:{en:"hello",hn:"India"}}}

而不是

object {value:15,object {desc:{en:"hello",hn:"world"}}}

object {value:25,object {desc:{en:"hello",hn:"India"}}}

3 个答案:

答案 0 :(得分:0)

不同浏览器的输出差异。我拿到 object {value:15,object {desc:{en:" hello",hn:" world"}}} object {value:25,object {desc:{en:" hello",hn:" India"}}} 通过铬。

答案 1 :(得分:0)

就像@Chales Tuang提到的那样,我得到了预期的输出

jsfiddle

var option={
  value:'',
  desc:{
   en:'',
   hn:''
 }
};
option.value='15';
option.desc.en='hello';
option.desc.hn='world'; 

console.log(option);

option.value='25';
option.desc.hn='India';

console.log(option); 

对于每次调用console.log时获得相同输出的情况,我可能想到的唯一解释是,浏览器正在应用Javascript中对象存在的原则,如Stoyan Stefanov在他的书中所示Object Oriented Javascript

因此,当您调用console.log时,它会看到对象的最新,最新属性,即使该对象在调用后被扩充,因为更新是在调用范围内,它只是抓取对象的当前更新状态。

无论如何,这是我对此的想法。

答案 2 :(得分:0)

这是因为WebKit浏览器(https://code.google.com/p/chromium/issues/detail?id=44720

中存在错误

不是记录整个对象,而是尝试记录特定值,您将获得预期的结果..

 console.log(option.desc.hn);

或尝试JSON.stringify

 console.log(JSON.stringify(option));

JS小提琴链接:https://jsfiddle.net/t744ohog/2/