javascript - js数组问题
PHP中文网
PHP中文网 2017-04-11 13:14:23
[JavaScript讨论组]

这是我的代码




    
    Document


    
    


这是打印结果


这里有个疑问是数组明明打印出来的是red,blue,green,但把数组展开,为什么只有0: blue 1: green length: 2
但后面的数组长度却打印出3 这是什么问题

PHP中文网
PHP中文网

认证0级讲师

全部回复(5)
PHP中文网

这个问题在于浏览器中所实现的console.log的特性。

以前的时候,就有一个疑问,console.log是异步的吗?当时有一个常用的例子,和题主的有异曲同工之妙:

var obj = {};
console.log(obj);
obj.foo = 'bar';

在过去的有一段时间里,webkit浏览器的console.log是异步的,因此上面的代码会在控制台返回 {foo: bar}。而如今的浏览器,比如最新的chrome,上面的代码只会看到一个空的Object{},但点击查看详情(展开)的话,又会看到{foo:bar},这是因为,console.log在代码执行的时候是立即拍摄了一个对象快照,但留在控制台的链接,却是一个指向对象的引用,因此如果点击了链接,将返回该引用对象的最新状态。

高洛峰

我遇到过类似的,提问过,你可以看下我采纳的答案;
https://segmentfault.com/q/10...

迷茫

打印的时候数组有三个元素,数组展开的时候colors.shift()已经执行了,会把数组的第一个元素删掉,所以你展开就只有2个了。

伊谢尔伦

shift() 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值。
还有数组是引用,所以变成两个

迷茫

这是console.log的问题 如果想看到实际的话可以对要log的值stringify一下,log的内容是对象的话都会存在类似的问题

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

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