这是我的代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script>
var colors = ['red','blue'];
var count = colors.push('green');
console.log(count);
console.log(colors);
console.log(colors.length);
var item = colors.shift();
</script>
</body>
</html>
这是打印结果
这里有个疑问是数组明明打印出来的是red,blue,green,但把数组展开,为什么只有0: blue 1: green length: 2
但后面的数组长度却打印出3 这是什么问题
这个问题在于浏览器中所实现的
console.log
的特性。以前的时候,就有一个疑问,
console.log
是异步的吗?当时有一个常用的例子,和题主的有异曲同工之妙:在过去的有一段时间里,webkit浏览器的
console.log
是异步的,因此上面的代码会在控制台返回{foo: bar}
。而如今的浏览器,比如最新的chrome,上面的代码只会看到一个空的Object{}
,但点击查看详情(展开)的话,又会看到{foo:bar}
,这是因为,console.log
在代码执行的时候是立即拍摄了一个对象快照,但留在控制台的链接,却是一个指向对象的引用,因此如果点击了链接,将返回该引用对象的最新状态。