如何检测 ECMAscript 版本?

问题描述 投票:0回答:5

我想看看我在浏览器中使用的 ECMAscript 版本(例如 chrome 59),因为在处理 RegExp 内容时 ECMAscript3 和 ECMAscript5 之间存在一些差异。
我已经找到了这方面的相关信息,但是我找不到关于如何检测 ECMAscript 版本的具体答案。
先谢谢了。

javascript google-chrome ecmascript-5
5个回答
19
投票

也许您可以尝试使用一些专门添加到 ES6 中的数据结构,例如 MapSet 等。这是为了区分 ES5ES6,但是您可以查找在 ES5 中添加但在 ES3 中不存在的功能你的情况?

try {
  var k = new Map();
  console.log("ES6 supported!!")
} catch(err) {
  console.log("ES6 not supported :(")
}

try {
  var k = new HashMap();
  console.log("ES100 supported!!")
} catch(err) {
  console.log("ES100 not supported :(")
}


9
投票

我认为这是不可能的,因为浏览器通常不会同时实现 ECMAScript 版本的所有功能。这就是为什么我们有像 Modernizr 这样的库和像我可以使用... 来找出可以使用哪些功能的网站。

您仍然可以构建一个小测试来确定 RegEx 在用户浏览器版本中的行为方式。


7
投票

ECMAScript 是一个行业标准:

ECMAScript 是一种已注册商标的脚本语言规范 由 Ecma International 在 ECMA-262 和 ISO/IEC 16262 中标准化。它 是为了标准化 JavaScript 而创建的,以促进多种 独立实施。

Javascript 是一种流行的实现,或多或少:

JavaScript 一直是最知名的 自标准首次发布以来 ECMAScript 的实施, 与其他著名的实现包括 JScript 和 动作脚本。 维基百科

考虑到各种浏览器、node.js 等中 JavaScript 实现的当前状态,没有人专门对自己进行版本控制,而是不断发展新功能。因此,最好的方法是检测(可能使用第 3 方库)是否存在所需的功能然后使用。否则退回到更传统的。通常是尝试一些操作,然后检查是否符合预期,没有魔法。


1
投票

这是一个扩展的 EcmaScript 检测器:

function getES() {
  var array = []
  if (!Array.isArray) {
    return 3
  } else if (!window.Promise) {
    return 5
  } else if (!array.includes) {
    return 6
  } else if (!"".padStart) {
    return 7
  } else if (!Promise.prototype.finally) {
    return 8
  } else if (!window.BigInt) {
    return 9
  } else if (!Promise.allSettled) {
    return 10
  } else if (!"".replaceAll) {
    return 11
  } else if (!array.at) {
    return 12
  } else {
    return 13
  }
}

var ecmascript = getES()
var year = 1999
if (ecmascript !== 3) {
  year = ecmascript + 2009
}
console.log("Version " + ecmascript + ", Year " + year)


0
投票

ECMAScript 在每个版本上支持不同的对象。要检测 ECMAScript 版本,我们可以检查对象是否退出浏览器。如果识别出该对象,则表示浏览器支持 ECMA 版本。

检查以下链接有一个很好的例子来检测 ECMAScript 版本。

https://www.devdiscuss.com/how-to-detect-the-ecmascript-version/

© www.soinside.com 2019 - 2024. All rights reserved.