javascript - 了解 JS try 和 catch 语句(用于添加自定义 Modernizr 测试)

标签 javascript try-catch modernizr

我目前正在结合使用两个 Modernizr 测试来提供一个方便的功能分支。我使用的两个 Modernizr 测试是“blob”和“SMIL”。

但是,由于为了方便起见,我只在 Modernizr 构建中使用这两个测试,因此我想将这些测试合并到一个具有更有意义名称的自定义测试中。例如:

;(function enhancedTest() {
    Modernizr.addTest('enhanced', function () {
         try {
            return !!new Blob();
            return !!document.createElementNS &&
                  /SVGAnimate/.test(toStringFn.call(document.createElementNS('http://www.w3.org/2000/svg', 'animate')));
         } catch (e) {
            return false;
         }
    }, {
         aliases: ['enhanced']
    });
})();

如果设备不支持 try 内的任何返回部分,我基本上希望测试失败。如果设备同时支持两者,则应该通过。

我以前从未用 try 和 catch 写过任何东西,我想知道这是否会像我预期的那样工作?

我担心的是,目前,如果它在第一个 return !!new Blob() 上成功,它将通过测试(即使它可能在第二部分失败)。

是这样的吗?或者我应该如何重构代码来实现我的目标?

最佳答案

My concern is that currently, if it succeeds on the first return !!new Blob() it will pass the test (even though it may fail on the second part).

你说得对。

尝试:

Modernizr.addTest(
  'enhanced',
  function() {
    try {
      new Blob(); // this line can throw an exception.
      return !!document.createElementNS && /SVGAnimate/.test( toStringFn.call( document.createElementNS('http://www.w3.org/2000/svg', 'animate') ) );
    } catch(e) {
      return false;
    }
  }
);

关于javascript - 了解 JS try 和 catch 语句(用于添加自定义 Modernizr 测试),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24183328/

相关文章:

c# - ServiceBase.Run,​​为什么我不能捕获它的异常或以其他方式对它们使用react?

javascript - Modernizr 的 requireJS 配置

java - 如果在打开新流之间处理 IO 流,使用单个 try-finally block 还是嵌套 try-with-resources 更好?

从 catch block 的结果调用具有通用参数的 Java 方法

javascript - 如何忽略被点击元素下方的元素 - NonFactors MVC Grid

javascript - 在浏览器中呈现后使用 javascript 和 css 样式化 XML(不是 HTML)

javascript - 如果我已经在使用 Modernizr,我还需要 HTML5 Shiv 吗?

javascript - 使用 modernizr 检测设备

javascript - 在 WordPress 中制作 php javascript 幻灯片

javascript - AngularJs指令嵌入错误和@绑定(bind)