为什么我得到错误的输出,当我修改以下Javascript对象代码
Why I am getting wrong output when I modify the following Javascript object code?
这是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/
- 使用AngularJS修改对象位置只需一次
- Reactjs:在修改对象之前,是否需要复制处于组件状态的对象
- 修改对象的原型不起作用
- 在 Javascript 中修改对象
- 通过Web服务修改对象列表,如何获取最终值列表
- 修改对象属性的方法中的 JavaScript 变量
- 在PouchDB/Barket.js中推送promise数组之前修改对象的值
- 就地修改对象javascript
- Backbone JS事件函数修改对象
- Javascript:从指针修改对象
- 使用Undercore在另一个对象内部修改对象内部的数组
- 修改对象's键而不创建新对象
- 在发布文档之前,如何在find()中修改对象级别的文档
- 在加载对象DOM之前修改对象DOM
- JS取回JSON解析是修改对象
- 继承和修改对象
- 在javascript中修改对象中的节点
- 修改对象存储的主键值
- 如何在修改对象后更新html中的数据
- Parse.com云功能-在发送到客户端之前手动修改对象字段