Javascript数组日志记录混乱
Javascript Array logging confusion
我注意到一些我根本无法理解的东西。我正在用JavaScript做一些非常简单的事情:
var a = [1,2,3];
console.log(a.push(4));
console.log(a);
console.log(a.push(5));
我希望控制台记录:例如,4
、[1,2,3,4]
和5
,如此处所述。问题是实际控制台输出看起来像:4
、[1,2,3,4,5]
和5
请参阅:http://jsfiddle.net/HknMF/
究竟是什么使5
出现在第二个日志输出中?
EDIT:fwiw以下是Firebug的屏幕截图,显示了这两种行为:https://i.stack.imgur.com/x2XH8.png
某些浏览器中的控制台使用对数组/对象的引用,因此当您检查它和console.log()
调用后更改的对象时,您将看到更改的对象。
在Firefox中,对象也会发生这种情况,但无论如何都以内联方式显示的数组不会发生这种情况:
>>> var a = [1,2,3]; console.log(a.push(4)); console.log(a); console.log(a.push(5));
4
[1, 2, 3, 4]
5
特别是对于不包含函数的对象,一个快速的解决方法是克隆它们(如果您有jQuery,则记录$.extend({}, yourObject)
)或记录它们的JSON字符串版本(然后您将失去漂亮的对象视图,只得到一个普通的字符串)。使用a.slice(0)
可以轻松克隆阵列(浅拷贝!)
依赖于浏览器,您的实时数组会被记录(Chrome)或字符串表示(Firefox)。
一份肤浅的副本就足以防止这种情况的发生。用途:
console.log( a.slice(0) );
为此。
相关文章:
- 使用Dnamics CRM 2011中的JavaScript读取子网格的所有记录,而不考虑活动页面
- AngularJs对所有页面中的所有记录进行排序
- 有没有一种方法可以在控制台关闭的情况下让console.log()在IE中记录消息
- window.location替换并传递URL历史记录条目中的变量
- Javascript历史记录转换为php行
- JavaScript,PHP-用JavaScript将多个数据库记录发送到变量或表
- 猫鼬在特定记录中查找嵌套记录
- 浏览器何时记录历史记录
- 将一个表的id与另一个表中的user_id进行匹配,以获取mysql中的记录
- 更新成员数据模型中的记录列表
- 如何使用提交按钮搜索表中的记录
- 正在OrientDB中嵌入函数中的记录
- Twitter Bootstrap 2.1.0子菜单在Responsive上看起来很混乱
- 使用Rails 3中的AJAX删除记录
- 用javascript记录传递给回调的参数的约定是什么
- 在页面上记录数据并实现pushstate()的最佳方式
- 输入类型按钮返回历史记录并返回顶部
- 我怎么能把一个错误当作未捕获的错误来记录呢
- HTML5历史记录-返回上一个完整页面按钮
- Javascript数组日志记录混乱