访问Safari 7.1+中的地图值

时间:2015-04-16 08:54:22

标签: javascript safari ecmascript-6

Safari支持版本7.1及更高版本(MDN)中的ES6地图和集。 我在我的应用程序中使用Map,并且在某些时候想要访问值。在地图上调用values()函数似乎是要走的路并返回迭代器。通过在返回的迭代器上调用next(),应该能够迭代值。这在Chrome中运行良好,但Safari做了一些奇怪的事情。它在调用Map Iterator时返回values(),但返回的迭代器没有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)。

1 个答案:

答案 0 :(得分:0)

这确实是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 */");
}