What is the correlation between ECMAScript 5 and JavaScript 1.8.5 in terms of language features?
我一直在阅读Mozilla在1.8.5版本中不断开发的javascript:https://developer.mozilla.org/en/javascript。
我的问题是:在语言特性方面,javascript1.8.5+和ECMAScript 5+之间的关系是什么?Mozilla的新JavaScript功能(如生成器、数组理解等)有可能成为EcmaScript的一部分吗?
我只想了解一下是否值得学习javascript1.8.5特性(并努力将它们填充到不支持的浏览器中),或者是否应该忘记JS 1.8.5并专注于学习/填充新的EcmaScript 5特性。
仅供参考:Mozilla讨论了他们计划如何使javascript符合EcmaScript 5的要求,这里是:https://developer.mozilla.org/en/javascript/ecmaScript_5_support_in_mozilla
- 我个人不希望Mozilla带来的Python。
- 我的主要问题是,当JavaScript最终能够在其regex中处理Unicode时,至少在1级上符合uts 18:"基本的Unicode支持"。在今天的后ASCII世界中,没有它就等于无用。
- 我也不觉得,我觉得有些功能很酷,但它太过杀伤力了,Python化是一个很好的表达方式。我唯一想要的是如果我选择声明类型的能力(如actionscript)
- @请不要严格打字!假设jquery在内部强制执行严格的输入。我们都必须开始使用它。对于我们所依赖的那些流行的第三方图书馆来说,这不是一个可选择的事情。
- @我是一个OO程序员,严格的打字对我很有帮助。我写的是厚客户,每页30,50节课。严格的输入可以在我手动测试页面或在单元测试之前捕获许多错误。jquery可能不会在其大多数函数中使用严格的类型。
- @juanmendes使用instanceof断言和检查。或者,您将太多的类类型的OO引入到JavaScript中。我看到不需要严格的输入,只需要一种适合JavaScript的不同类型的编程。Javascript太容易被错误的模式弯曲和滥用。
- @雷诺斯:完全不同意:我不会在每个函数中添加断言和instanceof。这就是语言的意义所在。如果您喜欢过程动态代码,我喜欢OO类型的代码。给每个人。我不知道有谁会写小部件驱动的桌面,比如不使用OO的Web应用。也许,你是第一个?对于网页、渐进式增强和简单的Web应用程序来说,是的,这太过分了。但是,当您处理JS呈现100%HTML的应用程序时,OO只是帮助您组织和维护代码。
- @我使用原型OO和功能代码。我不写过程代码。我只是从来没有用过打字检查。我用调试语句编写了我的代码的开发版本,测试了所有地方,然后让编译器把它去掉。它还帮助更多的然后阻碍,因为高水平的设计保持一致。
- OO不是静态类型的同义词。周围有很多动态类型的OO语言,而且一直都是。
- @我是其中之一。
- @雷诺斯:问题是大多数人把严格的输入和静态输入混淆了。大多数动态类型语言也是严格类型化的;它们只是不是静态类型化的。B&D的人对此很困惑。
- @t请记住b&d,什么意思?
- @雷诺斯:束缚和纪律;你知道,紧身衣编程。:)讨论这些问题的更好方法可能是编译时类型和运行时类型。两者都可以而且实际上通常都是严格的。问题归根结底是什么时候知道类型不匹配,而不是你是否知道它。
- @tchrist:在javascript支持unicode regex类别之前,您可以使用steven levithan的优秀的unicode插件作为他的xregexp库:xregexp.com/plugin s
- @雷诺斯:最后一个论点,我保证。我使用jsdoc和google闭包编译器在编译阶段添加类型检查。我只是想说,如果不需要一个构建步骤,拥有一个标准的方法来创建一个类,而不是一个我们现在拥有的每个lib的独立方法,那就太好了。当我同意你要静态类型时,我可能会说错话,我最希望的是编译器告诉我(当我选择这样做时),我使用了一个对象不存在的属性/方法,或者当我向一个不属于正确类型的函数传递某些内容时?你没有遇到那些虫子吗?
- @ JuanMendes。PSH使用NaturalDocs更好。说真的,尽管闭包编译器是一个很好的工具,可以添加编译级别的类型检查,而不干扰底层的javascript。如果闭包编译器允许使用契约,我将每天使用它。
- @Raynos:我的基本库是ext-js,所有的小部件都扩展了它们的类(使用js doc),所以我不能真正使用不同的文档格式,除非我想丢失从我的文档继承的所有信息。
- @Juanmendes小部件?小部件?!任何受人尊敬的手都会在画布上呈现他的图形用户界面。
- @raynos:real程序员使用butterlies xkcd.com/378编码
- @娟门德斯认真地说,画布上手工制作的桂花很漂亮。
javascript 1.8.5是Mozilla对EcmaScript的实现,添加了一些功能。它是ECMAScript规范的超集(以及当前实现的超集,如IE、Chrome和Opera)。Mozilla推动它添加到自己的浏览器中的功能,他们可能会或可能不会将其添加到ECMA中。请注意,Mozilla是W3C的成员,有一些说法,但我猜大多数功能都无法实现。
底线是不要使用它,除非你正在编码特定于火狐、FF扩展、XUL应用、Rhino的代码(由于@raynos增加了Rhino)
- 或者Rhino!或者运行在Mozilla JavaScript解释器上的任何其他东西。
- 那太酷了。实际上我认为Rhino使用的是一个更老版本的javascript,但是你甚至可以选择要使用的版本,它支持目前最多1.7个developer.mozilla.org/en/Rhino_shell。
- 谢谢你的直截了当的回答。
不屈不挠地专注于ES5。1.7&1.8特性的问题在于,它们会更改语言的语法,因此您不能将它们填充到其他代码中。
可以使用es5模拟对象的所有属性,但不能模拟let关键字。在其他浏览器中,各种表达式都不是有效的javascript。
您必须区分添加本机代码(这是ES5的主要功能)和更改JavaScript语法(这是1.7&1.8的功能)之间的区别。
1.7和1.8有一个用途,用于为Rhino平台开发。但对于浏览器来说,javascript必须遵循规范。
诚然,多值返回是一个非常好的特性。有这样的数组分配就好了
1 2 3 4 5
| function() f {
return [1,2,3];
}
[a,b,c] = f() |
但其他特性是语法的重大变化,您不能通过ecmascript来推动它们,它们只是无法处理它。像上面这样的小变化,你可能能够进入ES6,但你必须至少等待一年。
所以,现实地说,不要指望学习一年或两年后会有回报。很可能不会有回报。一定要看一些库,如underline.js,它们可以为您定义通用的函数实用程序方法。
- 它的regex是否已经根据uts 18提供了基本的unicode支持??
- 通过引入一个解析器/生成器,可以将代码编译为普通的JavaScript,从而可以改变语言的语法。请参阅coffeeesccript-jashkenas.github.com/coffee-script。这将是一种有效的(尽管非常耗时)填隙JS1.8.5支持方法。
- @我不知道。
- @RoyTinker可以用C编写脚本。我认为EcmaScript应该支持C。我有一个C到JavaScript编译器。
- @你的评论没有主题,问题不是关于regex的。
- @胡安,问题是两个标准之间的联系,包括新标准的讨论。很自然地会问,讨论的这两个新标准中的任何一个是否能够解决问题。
- @我猜,但是在Mozilla的JS或ECMAScript中还没有支持Unicode的说法,是吗?雷诺斯的回答中甚至没有提到雷杰克斯。
- @胡安有什么好大惊小怪的?评论一直都是离题的,至少它不是一个答案。它也比我们讨论它的两个评论更有价值;)
- @我认为这是一个严格的打字问题。:)
- @对不起,你们不是有意大惊小怪的。我仍然看不出与这个问题有任何关联。utf-8 regeex支持是我们很多人都希望的一个特性,它没有解决javascript 1.8和ecmascript5之间的相关性。
- 请注意,您的破坏赋值示例是有效的ES6,因此它们集中在这个特性上。
我认为EcmaScript是"标准",就像一个蓝图,而javascript是它所基于的实际语言。有点像W3C有他们的标准,然后人们(或不)基于它来制造渲染引擎。
所以基本上,为了回答你的问题,看看ecmascript,看看大家的共识是什么,javascript是如何"应该"工作的,但是你应该关注javascript,因为这就是你将要用的代码。