2

我想在 JavaScript/JScript/ECMAScript 中构建一个库......无论你想怎么称呼它,它都将针对现代标准(HTML5、CSS3、ESv5),考虑到任何支持该标准的浏览器!现在我知道已经有很多有用的库了,例如 jQuery 和 MooTools。当然它们很棒,而且我已经在必要时使用了它们,但我不应该仅仅因为它很受欢迎就被迫和其他开发者一样赶上潮流!

所以为了下面的问题,让我们不要关心第三方库,比如 jQuery 和 MooTools。让我们深入了解 JavaScript/JScript/ECMAScript。

首先,我在此之前问了一个问题(JavaScript、JScript 和 ECMAScript 之间有什么区别?),因为我不知道有什么区别。

谢天谢地,我得出以下结论:

ECMAScript 是语言规范。JavaScript 和 JScript 是 ECMAScript 的方言。

JavaScript 是 Mozilla 的 ECMAScript 实现。

JScript 是 Microsoft 的 ECMAScript 实现。

好的,这是一个很好的简单答案,不是吗?但这里有一些问题源于此:

  1. 非 Mozilla 浏览器是否支持“JavaScript”,支持到什么程度?
  2. 非微软浏览器是否支持“JScript”,支持到什么程度?

基于这两个问题,我做了一点挖掘,在 IE9、FF14 和 GC19 上做了一个简单的测试。

这是测试代码:

<!DOCTYPE html>
<html>
    <head>
        <title>HTML 5 Template</title>
        <script language="JavaScript1.3">
            jsver = "1.3";
        </script>
        <script language="JavaScript1.4">
            jsver = "1.4";
        </script>
        <script language="JavaScript1.5">
            jsver = "1.5";
        </script>
        <script language="JavaScript1.6">
            jsver = "1.6";
        </script>
        <script language="JavaScript1.7">
            jsver = "1.7";
        </script>
        <script language="JavaScript1.8">
            jsver = "1.8";
        </script>
        <script type="text/javascript">
            document.write("<B>Your browser supports JavaScript version " + jsver + ".</B>")
        </script>
    </head>
    <body>
    </body>
</html>

结果是:IE9 = JSv1.3,FF14 = JSv1.8,GC19 = JSv1.7

好的,然后我运行了这个测试,测试 ECMAScript 版本 5 支持: http: //kangax.github.com/es5-compat-table/#showold

再次使用相同的浏览器(IE9、FF14、GC19),ESv5 似乎得到了很好的支持!

现在是棘手的一点!我来自微软背景,使用 C#、ASP.NET 等语言编写软件,所以很自然地,我选择的 IDE 是 Visual Studio(目前是 2010 年)。当我查看 JavaScript 智能感知时,我看到了诸如 ActiveXObject、Array、Object 等的东西。

  1. 我应该相信 VS2010 的智能感知吗?
  2. 我在哪里可以找到 ESv5 支持的对象和功能的参考?
  3. 如何检测浏览器是否支持特定对象或功能?
  4. 有没有比 VS2010 更好的东西可以帮助我编写兼容的 ESv5 代码?
  5. 覆盖现有对象(如 Object、Number、Boolean 等)的实现是否安全,还是应该扩展现有实现?

最后,关于我自己与 jQuery。假设我懒得自己编写核心合规性和功能,我可以写我的库来坐在 jQuery 之上……或者这只是一个逃避?

4

2 回答 2

1

1) 不。当然,它不会仅限于有效的 ECMAScript。

2) http://kangax.github.com/es5-compat-table/总是有用的。

3)您可以检查它是否已定义。例如

typeof(Array.isArray) === 'function'; // true in newer browsers, false in IE8

4)你最好的选择是阅读规范!在您的代码中使用"use strict";也将捕获某些类别的错误,这是一种很好的做法。有关严格模式的更多说明,请访问http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/

5)当然我不会替换原来的对象。如果您要扩展属性,我首先会仔细检查是否存在兼容的实现。例如 PrototypeJS 添加(在浏览器实现它之前)一个document.getElementsByClassName. 当浏览器开始原生实现它时,他们发现使用 Prototype 的网站仍在使用基于 JS 的慢版本。修复只是将 Prototype 的定义包装在if (document.getElementsByClassName == undefined) { }

于 2012-08-21T12:13:59.987 回答
1

2)我发现您提供的概述非常好。你还想要什么?

3) 一个可以消除浏览器之间差异的好库是ES5-shim。它自动检测功能并为缺乏支持的浏览器提供填充程序。

4) Always use "use strict"; and a have good editor of your choice which has some kind of code-highlighting and perhaps code-completion. I use the browser consoles or firefox scratchpad (silly name for a good tool) for quick hacking sessions and put it all together in notepad++ (= the IDE of your choice).

5) Augmenting the native javascript objects has been debated a lot and has pros and cons. Prototype and MooTools go this way. jQuery takes the other way and provides a separate object for that. I personally prefer to leave the native (and especially host) objects alone and have your own namespace with the functions you need.

于 2012-08-21T12:38:57.557 回答