3

我想Number.EPSILON在我的应用程序中使用该值,并且想知道如何在不同的浏览器中支持它。MDN 声明它受 Firefox 和 Chrome 支持,但不受 IE 和 Safari 支持。

我自己在 IE11 和 Edge 的控制台中测试过。Edge2.220446049250313e-16按预期给了我,IE11 给了undefined. 我自己无法测试 Safari。

  1. 是否有显示不同浏览器版本支持的支持表?

  2. 我可以安全地var eps = Number.EPSILON || 2.220446049250313e-16;用作后备吗?

4

1 回答 1

5

1)您可以在浏览器中自己尝试打卡"https://jsfiddle.net/jz350gf1/1/"(不带引号)。如果您看到红色,则表示不支持。

javascript 代码是document.body.bgColor = Number.EPSILON !== undefined ? 'lime' : 'red';.

例如,Vista 上的 IE9 和 Safari 5.1 不支持它。

在 MDN 页面底部还有Number.EPSILON的兼容性表。目前,它声称只有 Chrome、Firefox 和(也许)Opera 支持它。大于 5.1 的 Safari 版本可能支持它。不过我没有Mac来测试它。

在 caniuse.com,这里是 ES6 引入这些特性的地方。看起来最新版本的 Safari 已完全支持。我不确定它可以追溯到多远。从那时到现在的版本是 Safari 的黑暗时代。Opera 可能不支持它?不,它确实支持它。

无论哪种方式,至于2)是的。常数是常数是常数。双精度浮点的 epsilon 在所有语言中总是相同的。尽管您应该根据此 wiki 页面具体导出该值,但您应该能够通过计算导出它。这是一个演示。

function getEpsilon() {
  var e = 1.0;
  while ( ( 1.0 + 0.5 * e ) !== 1.0 )
    e *= 0.5;
  return e;
}

alert("And the epsilon is... "+getEpsilon());

因此,var eps = Number.EPSILON || getEpsilon();如果您想对可能使用少于双精度浮点数类型的不合格浏览器保持超级关注,您可以这样做,尽管我相信不存在(我对例外持开放态度)。:)

于 2016-09-26T06:25:04.847 回答