我非常喜欢ES6生成器。有没有办法检测浏览器是否支持生成器?我知道当前可能没有很多浏览器(或者可能根本没有浏览器)支持生成器,但这对我的目的来说没问题。
我尝试过:
try {
function *(){}
} catch(err) {
console.log("No generators");
}
但它似乎不起作用。
如何在浏览器中检测对ES6生成器的支持?
我非常喜欢ES6生成器。有没有办法检测浏览器是否支持生成器?我知道当前可能没有很多浏览器(或者可能根本没有浏览器)支持生成器,但这对我的目的来说没问题。
我尝试过:
try {
function *(){}
} catch(err) {
console.log("No generators");
}
但它似乎不起作用。
如何在浏览器中检测对ES6生成器的支持?
在很少数情况下,eval
实际上是正确的解决方案。
对于语言结构的更改,您需要像这样的东西:
try {
eval("(function *(){})");
} catch(err) {
console.log(err);
console.log("No generators");
}
Jeremy清楚地解释了如何测试生成器的支持。您需要使用eval:
isGeneratorSupported = function(){
try {
eval("(function*(){})()");
return true;
} catch(err){
return false;
}
}
alert( isGeneratorSupported() );
function isCanvasSupported(){
var elem = document.createElement('canvas');
return !!(elem.getContext && elem.getContext('2d'));
}
function *(){}
时,JS引擎在第一步(解析你的代码)就失败了,甚至不尝试执行它。这是因为*
不是一个新的函数,而是一个新的语言结构,旧版本的JS引擎将抛出syntaxError
。同样,如果你编写function f(x, ...y) {}
,function f(x, y=1){}
或者甚至只有]
。它们都是当前JS中无效的结构(但其中有2个在ES6中是有效的,而谁知道也许]
在某些ES10中是有效的)。eval()
中,你可以做到这一点。'unsafe-eval'
,那么该如何使其正常工作呢? - Damian Yerrick