为什么我得到错误的输出,当我修改以下Javascript对象代码

Why I am getting wrong output when I modify the following Javascript object code?

本文关键字:修改 对象 代码 Javascript 错误 输出 为什么      更新时间:2023-09-26

这是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"}}}

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

就像@ charles 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在他的书中所示面向对象的Javascript

因此,当您调用console.log时,它会看到对象的最新的、最新的属性(ies),即使对象在调用后被增强,只要更新在调用的范围内,它就会获取对象的当前更新状态。

这就是我的想法。

这是由于WebKit浏览器的一个bug (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/