【问题标题】:creating an error message if browser does not support ES6 Template Literals如果浏览器不支持 ES6 模板文字,则创建错误消息
【发布时间】:2018-01-24 02:57:36
【问题描述】:

我一直在我的 javascript 中使用字符串文字。如果不支持字符串文字,我希望显示一条错误消息。 caniuse

我的想法是我会创建一个函数来查看浏览器是否会正确解析字符串插值字符串

    var supportsStringInterpulation = false;
try {
    var stringInsert = 'is a';
    var stringTestExpected = "this " + stringInsert + " test";
    var stringTestAccual = `this ${stringInsert} test`;
    supportsStringInterpolation  = stringTestAccual === stringTestExpected;
}
catch (err) { console.error("failed to render ` ")}

如果是对的什么都不做

如果错误则浏览器不支持然后创建并给出错误信息。

我现在的问题是,当我在 IE 11 中调试时,我的预期行为是它会失败测试并将supportsStringInterpulation = false 进一步发送到我的代码,但它似乎会中断并停止处理该脚本。

问题 1

有没有办法将布尔值返回到问题“当前浏览器是否支持ES6模板文字

【问题讨论】:

  • 您不能使用try/catch 解析错误,只能用于运行时错误。
  • 是的,这很困难。
  • 这实际上是一个非常有趣的问题——如何对语法糖进行特征检测。您无法按照上面建议的方式对其进行测试,因为如果不支持 '`' 则根本不会解析,因此您可能应该对本机 String 对象进行一些属性检查,以判断它是否是 ES6 字符串。 . 我想不出任何适合 OTOMH 的属性。研究时间!
  • 只要使用 babelJS 就不用再关心这种头痛了
  • BabelJS '好的,我会看看。

标签: javascript internet-explorer internet-explorer-11


【解决方案1】:

是的。这是eval 的合法用途之一:

var supportsTemplateLiterals = false;
try {
    eval("`foo`");
    supportsTemplateLiterals = true;
}
catch (e) {
}
console.log("Supports template literals? " + supportsTemplateLiterals);

之所以有效,是因为主要代码在 ES2015 之前的 JavaScript 引擎上解析,但 eval 中的代码没有;解析模板文字上的阻塞。

在 Chrome、Firefox、Edge 等上显示

支持模板文字?真的

在 IE(任何版本)上,它显示:

支持模板文字?错误的

【讨论】:

  • 你不能用fn`123`代替eval()吗?
  • @guest271314:不,因为解析会阻塞那里的反引号。
  • “阻塞”是指抛出错误?好久没用ie了,这里无法测试
  • @guest271314:不,我的意思是无法完全解析脚本,就像 OP 的代码一样。解析错误不是您可以捕获的 runtime 错误(evalnew Function 之外)。它们是您无法捕获的解析时错误(evalnew Function 之外)。
  • 抱歉,这是一个很好的答案。我最终在 VS 中使用 TypeScript 编译器来做 BabelJS 的事情,而不使用 BabelJS
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-03
  • 2010-09-25
  • 2020-07-11
  • 1970-01-01
  • 1970-01-01
  • 2019-04-25
  • 2011-12-21
相关资源
最近更新 更多