请参阅this jsbin其中,为了回答另一个问题,我构建了一个类似数组的对象:
function myCollection() {
var items = [], r = {}
function myPush(value){
value += 'bar'
r[items.length]=value;
items.push(value)
}
Object.defineProperty(r, "splice", {value:[].splice});
Object.defineProperty(r, "slice", {value:[].slice});
Object.defineProperty(r, "length", {
get : function(){ return items.length}
});
Object.defineProperty(r, "myPush", {value:myPush});
return r;
}
var fooCollection = myCollection();
fooCollection.myPush('foo');
console.log(fooCollection); // logs ["foobar"]
fooCollection.myPush('Ba');
console.log(fooCollection); // logs ["foobar", "Babar"]
fooCollection.myPush('wzouing');
console.log(fooCollection.slice(-2)); //logs ["Babar", "wzouingbar"]
console.log(fooCollection[1]); // logs Babar
如果您在控制台打开的情况下点击Chromium上的使用JS运行按钮,则可以获得此信息:
非常奇怪的是,如果你在控制台关闭时按下按钮就可以得到这个(当然你在重新打开控制台后看到它):
这是一个已知的错误吗?一项功能 ?灰色地带?有解决方法吗?
*注意:有时候,在Chrome / linux(而不是Chromium)上,我得到的东西更奇怪:关闭并重新打开控制台时,现有日志会发生变化。它们可以从阵列形式转变为折叠形式。 *
答案 0 :(得分:2)
我认为这种行为可能是一种节省内存/性能的行为,因为解析/打印运行时对象是一项非常昂贵的任务。
如果你真的需要一个未包装的信息,我建议使用
console.dir( myStuff );
或者,对于数组,有一个新的
console.table( myArray );
提示:console.dir
也是在Internet Explorer中记录对象内容的方式,而不是log()
的默认[object Object]
输出。
答案 1 :(得分:0)
这更像是一个问题:https://bugs.webkit.org/show_bug.cgi?id=35801
似乎已经在webkit中修复了。
答案 2 :(得分:0)
非常奇怪的是,如果在控制台关闭时记录对象,则无法获得扩展(类似阵列)视图(当然,在重新打开控制台之后)。
这是一个已知的错误吗?功能?
一个功能,我猜。控制台在未打开时针对性能进行了优化,因此无法计算对象的扩展视图
有解决方法吗?
看看How can I change the default behavior of console.log? (*Error console in safari, no add-on*)。无论如何,您还拥有typical lazyness problem。记录JSON字符串应该有所帮助。