`Map` returns 带有 BabelJS 的空对象

`Map` returns empty object with BabelJS

我正在尝试 运行 使用 BabelJs 跟踪代码:

var m = new Map();
m.set('a', 'b');
m.set('b', 1);
m.set('c', { a: 12 });

console.log(m);
console.log(typeof m);

但是我从 babel-node 得到一个空的 object 作为结果:

{}
object

有什么问题吗?

好的,我找到问题了。如果你使用 iojs 而不是 node,效果很好:

babel-node test/t.js

结果将是:

object
Map { 'a' => 'b', 'b' => 1, 'c' => { a: 12 } }

注意: iojs 安装程序将 node 的符号链接更改为 iojs

What's the problem?

没有问题。地图根本没有自己的可枚举属性。如果你的问题是为什么你看到 {} 而不是 Map {....},那是因为你的环境还不支持 Maps,因此 core-js(这是 Babel 使用的)填充它们。

不可能 (afaik) 覆盖 console.log 应该如何显示值,因此您只能看到一个空对象。根据浏览器供应商认为有用的内容,控制台只会向您显示 一些 值表示形式。


为了让我的观点更清楚,让我们看看你得到了什么 console.log(document.body):

> console.log(document.body)
<body class=​"...">​…​</body>​

这是否意味着 document.body 是一个包含 HTML 的字符串?当然不是。 document.body 是一个 DOM 元素。控制台仅呈现其 HTML 表示,因为有人认为这比仅转储 DOM 元素的所有属性更有帮助。

如果您真的想查看对象的所有属性,console.dir 至少能让您更接近这一点。