Javascript Internet Explorer:忽略未知的ES6语法

Javascript Internet Explorer:忽略未知的ES6语法,javascript,internet-explorer,ecmascript-6,Javascript,Internet Explorer,Ecmascript 6,要修复只在Firefox中出现的bug,我需要使用loaded承诺的FontFace。我目前使用以下代码: if(document.font){ for(document.fonts.values()的var fontFace){ 如果(fontFace['family']==fontFamily){ fontFace.loaded.then(doStuff); } } }否则{ doStuff(); }不幸的是,当代码应该在不受支持的浏览器中运行时,您不能在代码中使用进行迭代。问题是,在执行

要修复只在Firefox中出现的bug,我需要使用
loaded
承诺的
FontFace
。我目前使用以下代码:

if(document.font){
for(document.fonts.values()的var fontFace){
如果(fontFace['family']==fontFamily){
fontFace.loaded.then(doStuff);
}
}
}否则{
doStuff();

}
不幸的是,当代码应该在不受支持的浏览器中运行时,您不能在代码中使用
进行迭代。问题是,在执行和检查条件之前,错误发生在解析代码的时刻


如果你真的想使用for of,你需要为现代浏览器创建一个特殊的JS包,或者用Babel处理你的代码,将你的代码转换成es5兼容的。

不幸的是,当它应该在不受支持的浏览器中运行时,你不能在你的代码中使用for of
迭代。问题是,在执行和检查条件之前,错误发生在解析代码的时刻


如果您确实想使用for of,则需要为现代浏览器创建一个特殊的JS包,或者使用Babel处理代码,以将代码转换为与es5兼容的代码。

我使用以下代码解决了问题:

if(document.font){
var iter=document.fonts.values();
做{
var item=iter.next();
var fontFace=item.value;
如果(fontFace&&fontFace['family']==fontFamilyStr){
fontFace.loaded.then(doStuff);
}
}而(!item.done);
}否则{
doStuff();

}
我用以下代码解决了问题:

if(document.font){
var iter=document.fonts.values();
做{
var item=iter.next();
var fontFace=item.value;
如果(fontFace&&fontFace['family']==fontFamilyStr){
fontFace.loaded.then(doStuff);
}
}而(!item.done);
}否则{
doStuff();
}
我推荐

const fontFace = Array.from(document.fonts).find(face => face.family === fontFamily);
if (fontFace) {
  fontFace.loaded.then(doStuff);
}
Array.from
从一个iterable创建一个数组,然后您可以使用普通的
Array.prototype.some
来检查匹配项

然后,您可以将整个支票简化为

const fontFace = document.fonts &&
  Array.from(document.fonts).find(face => face.family === fontFamily);

if (fontFace) fontFace.loaded.then(doStuff);
else doStuff();
假设您想要运行
doStuff
,如果两种字体都不匹配的话。

我建议

const fontFace = Array.from(document.fonts).find(face => face.family === fontFamily);
if (fontFace) {
  fontFace.loaded.then(doStuff);
}
Array.from
从一个iterable创建一个数组,然后您可以使用普通的
Array.prototype.some
来检查匹配项

然后,您可以将整个支票简化为

const fontFace = document.fonts &&
  Array.from(document.fonts).find(face => face.family === fontFamily);

if (fontFace) fontFace.loaded.then(doStuff);
else doStuff();

假设您想要运行
doStuff
,如果两个字体面都不匹配。

使用不同的循环,它应该可以工作。不同的循环是什么意思
document.fonts.values
返回一个迭代器,对。。在中或使用“正常”for循环不起作用。“是否有一种方法可以迭代IE也支持的document.fonts.values”否,因为IE中首先没有
document.fonts
。抱歉,描述中不清楚。我知道IE不支持字体加载API,但我想要一种在受支持的浏览器中迭代
document.fonts.values
,而不让IE抛出错误的方法。但我同时找到了一种方法(见下面的答案)。使用不同的循环,它应该会工作。你说不同的循环是什么意思
document.fonts.values
返回一个迭代器,对。。在中或使用“正常”for循环不起作用。“是否有一种方法可以迭代IE也支持的document.fonts.values”否,因为IE中首先没有
document.fonts
。抱歉,描述中不清楚。我知道IE不支持字体加载API,但我想要一种在受支持的浏览器中迭代
document.fonts.values
,而不让IE抛出错误的方法。但是我同时找到了一种方法(见下面的答案)。谢谢,我在
do中使用
next()
解决了这个问题。。虽然
循环(参见下面的答案)。谢谢,我通过在
do中使用
next()
解决了这个问题。。while
循环(参见下面的答案)。谢谢,但这不起作用,因为
FontFaceSet
与数组不同(没有
length
属性),因此无法使用
array.from
将其转换为数组。它与数组不同,但它是可编辑的,因此它将与
array.from
数组一起工作(document.fonts)返回一个空数组(在Firefox和Chrome中)。并对(document.fonts.values()的var fontFace)console.log(fontFace)执行
操作;
记录任何内容?或检查
数组from(document.fonts.values())
。如果没有,那么它们是相等的。任何你可以传递到
的东西,你可以传递到
数组。从
中获取所有项目。抱歉,没有检查。它也不会记录任何东西。代码可以工作,并且比我的实现更优雅。谢谢!谢谢,但这不起作用,因为
FontFaceSet
是无效的't array like(没有
length
属性),因此无法使用
数组转换为数组。from
。它与数组不同,但它是可编辑的,因此它将与
数组一起使用。from
数组。from(document.font)
返回一个空数组(在Firefox和Chrome中)。对于(document.fonts.values()的var fontFace)console.log(fontFace);
log any?或检查
Array.from(document.fonts.values())
。如果不是,那么它们是相等的。任何你可以传递到
的内容,你可以传递到
数组。从
中取出所有项目。抱歉,没有检查。它也不会记录任何内容。代码工作正常,比我的实现更优雅。谢谢!