目前,唯一完全支持的语言,以及浏览器中DOM树操作的事实标准是JavaScript.看起来它有深层设计问题,使它成为新手的漏洞和安全漏洞的雷区.
您是否知道在下一代浏览器中为DOM树操作和HTTP请求引入任何类型(不仅是javascript)的更好(重新设计)语言的任何现有或计划的主动性?如果是,那么将它集成到Firefox中的路线图是什么?如果不是,那么由于什么原因(互操作性除外)应该是JavaScript浏览器平台上唯一支持的语言?
我已经使用过jQuery,我也读过"javascript:好的部分".确实这些建议很好,但我无法理解的是:为什么只有javascript?在服务器端(你最喜欢的os平台),我们可以使用每种语言操作DOM树,甚至是fortran.为什么客户端(浏览器平台)仅支持javascript?
javascript的问题不是语言本身 - 它是一个非常好的原型和动态语言.如果你来自OO背景,那里有一点学习曲线,但这不是语言的错.
大多数人都认为Javascript就像Java,因为它具有类似的语法和类似的名称,但实际上它更像是lisp.它实际上非常适合DOM操作.
真正的问题是它是由浏览器编译的,这意味着它的工作方式取决于客户端.
实际DOM不仅取决于浏览器,而且性能和布局也存在巨大差异.
编辑以下澄清问题
假设支持多种解释语言 - 您仍然遇到相同的问题.各种浏览器仍然是错误的并且具有不同的DOM.
此外,您必须在浏览器中内置解释器,或以某种方式安装为插件(您可以在提供页面之前检查)以获得每种语言.让Javascript保持一致需要很长时间.
您不能以相同的方式使用编译语言 - 然后您将引入一个无法轻易审查其可执行文件的可执行文件.很多用户会选择不让它运行.
好吧,那么编译代码的某种沙盒呢?对我来说听起来像Java Applets.或Flash中的ActionScript.或Silverlight中的C#.
某种IL标准怎么样?这有更大的潜力.用您想要的任何语言进行开发,然后将其编译为IL,浏览器然后JIT.
除了,Javascript已经是那种IL - 只看GWT.它允许您使用Java编写程序,但将它们分发为HTML和JS.
编辑以下进一步澄清问题
Javascript不是,或者说不是,浏览器支持的唯一语言:回到Internet Explorer黑暗时代,您可以选择Javascript或VBScript在IE中运行.技术上IE甚至没有运行Javascript - 它运行JScript(主要是为了避免向Sun支付单词java,Oracle仍然拥有Javascript这个名称).
问题是VBScript是微软专有的,但它也不是很好.虽然Javascript在其他浏览器中添加功能并获得最高速率的调试工具(如FireBug),但VBScript仍然只支持IE,而且几乎无法调试(IE4/5/6中的dev工具不存在).与此同时,VBScript也扩展为在操作系统中成为一个非常强大的脚本工具,但浏览器中没有这些功能(当它们成为大规模的安全漏洞时).
还有一些企业内部应用程序使用VBScript(有些依赖于那些安全漏洞),而且它们仍在运行IE7(它们只停止了IE6,因为MS最终将其终止).
让Javascript进入它的当前状态一直是一场噩梦,已经用了20年.它仍然没有一致的支持,某些浏览器仍然缺少语言功能(在1999年指定),并且需要大量的垫片.
在浏览器中添加替代语言进行解释会面临两个主要问题:
让所有浏览器供应商实施新的语言标准 - 他们仍然没有在20年内为Javascript管理.
第二种语言可能会削弱你已经拥有的支持,允许(例如)IE获得二流Javascript支持但是再次获得很好的VBScript.我真的不想为不同的浏览器用不同的语言编写代码.
应该注意的是,Javascript并没有"完成" - 它仍在不断发展,以便在新的浏览器中变得更好.在最新的版本是超前于浏览器的实现年,他们的下一个工作.
目前,使用编译为Javascript的语言似乎是在编写更智能的代码时到达所有平台的唯一现实方法,这很可能会持续很长时间.对于任何新产品,总有一些原因会导致一个或多个供应商不急于发货.
(但我真的不认为这是一个问题.Javascript现在已经很好地优化了.如果手工编写,机器代码也不安全,但作为编译目标和执行语言可以正常工作.)
这么多选择有越来越多的语言库可以编译成Javascript.可以在这里找到一个相当全面的列表:
在Coffeescript Wiki上编译为JS的语言列表
值得注意的
我会提到一些我认为值得注意的东西(毫无疑问会忽略一些我不知道的宝石):
Spider出现在2016年.它声称采用了Go,Swift,Python,C#和CoffeeScript的最佳创意.它不是类型安全的,但它确实有一些小的安全功能.
榆树:Haskell可能是他们所有人中最聪明的语言,而Elm是Haskell for Javascript的变体.它具有高度的类型感和简洁性,并提供功能反应式编程作为反应模板或MVC意大利面的简洁替代品.但对程序程序员来说可能会非常震惊.
Google的Go旨在简洁,简洁和安全.Go代码可以由GopherJS编译成Javascript .
Dart是谷歌后来试图取代Javascript的.它通过类似C/Java的语法提供接口和抽象类,并带有可选的输入.
Haxe就像Flash的ActionScript,但它可以针对多种语言,因此您的代码可以在Java,C,Flash,PHP和Javascript程序中重复使用.它提供类型安全和动态对象.
Opalang为Javascript添加语法糖,以提供直接数据库访问,智能连续,类型检查和协助客户端/服务器分离.(绑定到NodeJS和MongoDB.)
GorillaScript,"一种编译到JavaScript的语言,旨在为用户提供帮助,同时尝试防止一些常见错误." 类似于Coffeescript但更全面,提供了一系列额外的功能来增加安全性并减少重复的样板模式.
LiteScript介于Coffeescript和GorillaScript之间.它为"内联"回调提供了异步/良率语法,并检查变量拼写错误.
Microsoft的TypeScript是Javascript的一个小超集,它允许您对函数参数设置类型限制,这可能会捕获一些错误.类似地,BetterJS允许您应用限制,但在纯Javascript中,通过添加额外调用或通过在JSDoc注释中指定类型.现在Facebook已经提供了另外执行类型推断的Flow.
LiveScript是Coffeescript的副产品,因其简洁而受欢迎,但对我来说看起来并不易读.对于球队来说可能不是最好的.
怎么选择?
在选择其他语言时,需要考虑以下因素:
如果其他开发人员将来加入您的项目,他们需要多长时间才能加快学习这门语言的速度,或者他们已经知道的机会有多大?
语言是否具有太少的功能(代码仍将充满样板)或功能太多(需要很长时间才能掌握,在此之前一些有效的代码可能无法解读)?
它是否具有您的项目所需的功能?(你的项目是否需要类型检查和接口?是否需要智能延续以避免嵌套回调地狱?是否有很多反应?未来可能需要针对其他环境?)
未来...
杰夫沃克撰写了一系列发人深省的关于"Javascript问题"的博客文章,其中包括为什么他认为TypeScript,Dart和Coffeescript都没有提供足够的解决方案.他在结论中提出了改进语言的一些理想特征.
JavaScript应该是浏览器平台上唯一支持的语言吗?
是的,不是.有一个替代品叫做Dart by Google,它可以编译成JavaScript,就像jQuery一样,它试图让DOM操作更容易一些.实验,检查它可能很有趣.
来自Google,请参阅dart语言
从Microsoft看到TypeScript语言
也可以看看
榆树
卡尔
确实,Javascript在某种程度上难以应对,但Web开发社区已经走了很长一段路.相反,我鼓励你看一下jQuery.它很容易并且抽象出所有各种问题.
实际上没有其他选择可以全面运作.Flash浮现在脑海中,但这也是ECMA脚本,对于大多数事情来说它可能过度杀戮.
短期来说,我会使用像jQuery这样的东西来隐藏浏览器的不兼容性.从长远来看,像Silverlight或Adobe AIR这样的技术未来可能会成为一个非常不同的雷区(但仍然是一个雷区).
Doug Crockford 与Google进行了一次谈话,详细介绍了JavaScript及其未来的不良部分.它实际上自1999年以来没有太大的改变 - 这可以说是一件好事(几乎所有的浏览器都可以运行相同的代码,只要你知道它们的局限性)并且道格显示好的部分在哪里主要是误解,结果证明是非常强大的.
对于DOM操作,将JQuery看作是一个客户端库,用一些操作来替换大多数糟糕的DOM API,这些操作很容易写入更易于编写的优雅代码.
如果你认为JavaScript有很深的问题,我推荐Doug Crockford的书,JavaScript:The Good Parts.(或Google为"Crockford JavaScript"找到他已经完成的几个视频演示.)Crockford草拟了一个安全的子集和一组实践,并特别列出了要避免的语言的某些部分.
我不知道计划将JavaScript替换为操纵DOM的事实上的手段.所以最好学会安全地使用它.