编写符合ECMAScript5标准的代码

时间:2012-08-21 11:28:38

标签: javascript jquery jscript ecmascript-5

我想在JavaScript / JScript / ECMAScript中构建一个库...无论你想要什么,它都将针对现代标准(HTML5,CSS3,ESv5),考虑到这一点,任何支持该标准的浏览器!现在我知道那里已经有很多有用的库,比如jQuery和MooTools。当然,他们很棒,我已经在必要时使用了这些,但我不应该像其他开发人员那样被迫加入同样的潮流,因为它很受欢迎!

因此,为了解决以下问题,我们不要关注第三方库,例如jQuery和MooTools。让我们来看看实用的JavaScript / JScript / ECMAScript。

首先,我在此之前提出了一个问题(What's the difference between JavaScript, JScript & ECMAScript?),因为我不知道有什么区别。

谢天谢地,我总结了以下内容:

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

JavaScript是Mozilla对ECMAScript的实现。

JScript是Microsoft的ECMAScript实现。

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

  1. 是非Mozilla浏览器支持的“JavaScript”,在多大程度上支持?
  2. 是非微软浏览器支持的“JScript”,程度如何?
  3. 基于这两个问题,我做了一些挖掘,并对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 intellisense时,我会看到ActiveXObject,Array,Object等等。

    1. 我应该相信VS2010的intellisense吗?
    2. 在哪里可以找到ESv5支持的对象和功能的参考?
    3. 如何检测浏览器是否支持特定对象或功能?
    4. 那里有什么比VS2010更好的东西可以帮助我编写兼容的ESv5代码吗?
    5. 覆盖Object,Number,Boolean等现有对象的实现是否安全,还是应该扩展现有的实现?
    6. 最后,关于我自己的jQuery。让我们说我不会费心去写核心合规性&amp;功能我自己,我可以写我的库坐在jQuery之上......或者这只是一个copout?

2 个答案:

答案 0 :(得分:1)

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

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

3)您可以检查它是否已定义。 E.g。

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) { }

答案 1 :(得分:1)

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

3)平衡浏览器之间差异的好库ES5-shim。它自动检测功能并为缺乏支持的浏览器提供填充程序。

4)始终使用"use strict";并拥有一个好的编辑器,它有一些代码突出显示,也许代码完成。我使用浏览器控制台或firefox暂存器(一个好工具的傻名称)进行快速黑客攻击,并将它们放在记事本++(=您选择的IDE)中。

5)增加原生javascript对象已经争论不休,并且有利有弊。原型和MooTools就是这样。 jQuery采用另一种方式,并为此提供单独的对象。我个人更喜欢单独保留本机(尤其是主机)对象,并拥有自己的命名空间和所需的功能。