javascript - 如何证明我的 JavaScript 文件在特定 JS 或 ECMA 版本的范围内?

标签 javascript version

假设您将获得一堆 .js 文件,现在您的工作是将它们分类为如下组:

  • 至少需要 JavaScript 1.85
  • 至少需要 E4X (ECMAScript 4 EX)
  • 至少需要 ECMAScript 5

或类似的东西。

我对任何解决方案都感兴趣,尤其是那些使用 JavaScript 或 PHP 的解决方案。这用于创建自动化规范,但这无关紧要——这是一个很好的任务,应该很容易解决——但是,我不知道如何解决,这对我来说并不容易。因此,如果这对您来说很容易,请分享任何提示。

我希望是这样的 - http://kangax.github.com/es5-compat-table/# - 只是不针对浏览器,而是针对针对不同 JavaScript 实现检查的给定文件。

我的猜测是,每个版本都必须有一些可以测试的细节。但是,我所能找到的只是关于“此浏览器支持什么版本”的内容。


PS:不要从字面上理解“现在这是你的工作”,我用它来演示任务,而不是暗示我希望为我完成工作;在解决这个问题的过程中,如果能得到一些帮助或指导就好了。


编辑:我采取了简单的方法,要求 ECMAScript 5 得到至少与当前 FireFox 一样好的支持,以使我的项目按预期和预期工作。

但是,我仍然对任何解决方案尝试感兴趣,或者至少对“可能(使用 XY)”或“不可能,因为……”做出明确的回答; XY 可以只是一些关键字,例如 FrameworkXY 或 DesignPatternXY 或其他任何内容,当然也可以是更详细的解决方案。

最佳答案

本质上,您正在寻找某些 javascript 文件的最低要求。我会说这在运行时之前是不可能的。 JavaScript 是一种动态语言。因此,您没有编译时错误。因此,在您处于某种封闭状态之前,您无法判断某些东西不起作用,即使那样它也会产生误导。您的依赖项实际上可以解决许多兼容性问题。

示例:

  • JS 文件 A 使用了一些 ES5 特性
  • JS 文件 B 为 ES5 缺陷浏览器提供了一个垫片,或者至少以某种方式模仿它。
  • JS 文件 A 和 B 总是一起加载,但独立 A 看起来行不通。

例子2:

  • Object.create 就是你要测试的
  • 一个叫 Crockford 的人添加了 create 到 Object.prototype
  • Object.create 现在可以在兼容性较差的浏览器中运行,并且没有任何损坏。

解决方案一:

  1. 构建或查找依赖关系图。您肯定已经有了一个依赖关系图,可以是显式的,也可以通过遍历 HTML 文件来生成它。
  2. 在功能递减的环境中运行所有相关代码路径(例如:ES5,然后是 E4X,然后是 JS 1.x,等等)。
  3. 一旦 JS 文件包因某些代码路径而失败,您就会知道它们的最低要求。
  4. 也许您可以遍历对象中的公共(public)函数并使用依赖注入(inject)来填充构造函数和方法。不过这听起来真的很难。

方案二:

  1. 使用webdriver 在各种环境中访问您的网页。
  2. window.onerror 映射到一个函数,告诉您当前页面是否在执行某些操作时崩溃。
  3. 出错时您会知道当前页面上的包有问题,因此请保存该数据。

这两种解决方案都假定您始终编写完美的 JS,绝不会出现错误,这是您应该努力但不现实的事情。这有可能;但是,虽然会为您提供一些基本的“冒烟测试”。

关于javascript - 如何证明我的 JavaScript 文件在特定 JS 或 ECMA 版本的范围内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15337684/

相关文章:

java - ant 属性(property)以另一属性(property)为条件

windows - Window 2003 server SP2检测

c++ - msbuild C++ : how do I supply desired version info as command line parameter?

javascript - 重新应用 jquery 函数

javascript - 如何在 Vue.js 或 Nuxt.js 中的 First Contentful Paint 或第一个元素之后加载组件?

javascript - CF-Hash 属性和脚本神秘地添加到 mailto 链接

javascript - 参数 "{limit: 25}"在 jQuery .load() 函数中意味着什么?

javascript - 如何使用 PHP 或 Javascript 删除 Microsoft Edge 的缓存?

jpa - 通过 Spring Data JPA 执行批量更新时如何更新 @Version 字段

version - 如何以编程方式获取 alfresco 版本号