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)。
答案 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 */");
}