在 Safari 7.1+ 中访问地图值

Access to Map values in Safari 7.1+

Safari 在 7.1 及更高版本 (MDN) 中支持 ES6 地图和集合。 我在我的应用程序中使用 Map 并且在某些时候想要访问这些值。在地图上调用 values() 函数似乎是可行的方法,而 returns 是一个迭代器。通过在返回的迭代器上调用 next(),应该能够迭代这些值。这在 Chrome 中工作正常,但 Safari 做一些奇怪的事情。调用values()时returns一个Map Iterator,但返回的迭代器没有next()函数

m = new Map();
m.set(1, "test");
m.set("2", false);
it = m.values(); // returns Map Iterator
it.next(); // TypeError: undefined is not a function

我是否遗漏了一些明显的东西,或者 Safari 实现只是部分? 还有其他方法可以访问这些值吗?使用 for..of 构造不是一个选项,因为这是新语法并且在旧浏览器中不受支持(为此我使用 es6-collections shim)。

这似乎确实是 Safari 7.1 和 8 的一个错误。我设法通过首先检查下一个函数是否可用来解决这个问题,如果不可用,我使用 for...of 构造。因为这是 ES6 之前的无效语法,所以我不得不将其包装在 eval 语句中:

m = new Map();
m.set(1, "test");
m.set("2", false);
it = m.values(); // returns an Iterator
if (typeof it.next === 'function') {
    v = it.next();
    // do something with v here
} else {
    eval("for (v of iterator) /* do something with v here */");
}