javascript - 在修改js对象中的属性(也是一个对象)的时候出现的怪异现象是怎么回事??
PHP中文网
PHP中文网 2017-04-11 13:30:34
[JavaScript讨论组]

定义一个变量:var test= {obj: {one: 'nihao'}}

打印输出: console.log(test , '直接输出值:' + test['obj']['one']); 显示如下:

修改变量后 test['obj']['one'] = 'yueshu' , 再次打印输出:console.log(test , '直接输出值:' + test['obj']['one']) 显示如下:

我觉得很郁闷的是:为什么第一次打印 test对象 的时候,test['obj']['one'] 的值竟然是修改后的值,要知道修改是在打印之后发生的事啊!而且直接打印 test['obj']['one'] 反倒是修改之前的值!

这个现象怎么是什么原因导致的??

完整打印打码:

    var test = {obj: {one: 'nihao'}};
    console.log(test , '直接输出值:' + test['obj']['one']);
    test['obj']['one'] = 'yueshu';
    console.log(test ,  '直接输出值:' + test['obj']['one']);
PHP中文网
PHP中文网

认证0级讲师

全部回复(5)
PHPz

有可能是,开发者工具在那里记了一个对象,当你点开三角的时候才去加载的属性……所以就这样了。
如果你想显示当时的信息,可以考虑用 JSON.stringify(obj) 把对象处理成 JSON 来输出,试试。

黄舟

console.log()的执行顺序一般在最后。就算代码的位置在前面但是实际也是在最后的。猜想和setTimeout差不多,线程空闲之前不会执行。

PHPz

我搞错了,等大神回答吧,这问题还真没遇到过。。

巴扎黑

问题描述的不过清楚,你是不是执行了下面的脚本:

var test= {obj: {one: 'nihao'}};
console.log(test , '直接输出值:' + test['obj']['one']);
test['obj']['one'] = 'yueshu';
console.log(test , '直接输出值:' + test['obj']['one']);

然后看控制台的打印信息,如发图。

应该是console.log出来的对象引用了同一个对象window.test
类似经典的闭包问题 : https://segmentfault.com/q/10...,查看这个对象类似这里的click,是异步的。

PHP中文网

反驳 @roshineHuang 和 @scort
console不是异步的,应该是浏览器环境下的控制台输出是异步的

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号