我想在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实现。
好的,这是一个很好的简单答案不是吗?但是这里有一些问题源于此:基于这两个问题,我做了一些挖掘,并对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等等。
最后,关于我自己的jQuery。让我们说我不会费心去写核心合规性&amp;功能我自己,我可以写我的库坐在jQuery之上......或者这只是一个copout?
答案 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采用另一种方式,并为此提供单独的对象。我个人更喜欢单独保留本机(尤其是主机)对象,并拥有自己的命名空间和所需的功能。