2017-08-08 145 views
0

我正在使用repl.it/languages/javascript如何在控制台中显示javascript ES6地图对象?

打印出来之前是否必须将其转换为对象?

我已经试过

const mapObject = new Map(); 
 
    
 
    mapObject.set(1, 'hello'); 
 
    
 
    console.log(JSON.stringify(mapObject)); 
 
    console.log(mapObject);

结果总是空的对象。

当我使用

console.log([...mapObject]); 

它打印出的阵列格式。

+2

'的console.log( mapObject)'在最新的Chrome和node7中工作得很好。你的平台是什么? – georg

+0

@georg https://repl.it/languages/javascript – newguy

+0

使用'console.dir'而不是'.log',并且不进行字符串化。 – Teemu

回答

2

注:这答案只有既然你在你使用repl.it评论说是使用

相关的repl.it沙箱环境OP,还有你可以用它来写自己的一招“采伐策略”。

请注意,您不应该在生产中使用这个技巧,主要是因为它编辑了原生原型。在一些Node环境中,在你自己的代码中,它可能是有用的。

的想法是创建一个Map方法inspect迭代是在entries的:

Map.prototype.inspect = function() { 
    return `Map(${mapEntriesToString(this.entries())})` 
} 

function mapEntriesToString(entries) { 
    return Array 
    .from(entries, ([k, v]) => `\n ${k}: ${v}`) 
    .join("") + "\n"; 
} 

你可以看到,repl.it支持它here

console.log(new Map([["a", 1], ["b", 2]])); 
// Logs: 
/* 
Map(
    a: 1 
    b: 2 
) 
*/ 
+1

好的。我刚刚完成了类似的事情,但我选择了他们的控制台.log'代替:) https://repl.it/KBdU –

+1

@DaveSalomon很好!感觉像是“我们处于在线沙盒环境中;让我们打破所有原生原型和默认实现!” ;)尽管如此,这两种方法都可以在调试过程中提供帮助,所以很高兴看到可以做什么。 – user3297291

相关问题