javascript - JavaScript 的替代品

标签 javascript browser

目前,唯一完全受支持的语言以及浏览器中 DOM 树操作的事实上的标准是 JavaScript。看起来它有很深的设计问题,使其成为新手的错误和安全漏洞的雷区。

您是否知道任何现有的或计划的倡议来为下一代浏览器中的 DOM 树操作和 HTTP 请求引入一种更好的(重新设计的)语言(不仅仅是 javascript)?如果是,那么将其集成到 Firefox 中的路线图是什么,如果不是,出于什么原因(除了互操作性)JavaScript 应该是浏览器平台上唯一支持的语言?

我已经使用过 jQuery,并且还阅读了“javascript: the good parts”。确实这些建议很好,但我无法理解的是:为什么只有 javascript?在服务器端(您最喜欢的操作系统平台),我们可以使用每种语言操作 DOM 树,甚至是 fortran。为什么客户端(浏览器平台)只支持javascript?

最佳答案

javascript 的问题不在于语言本身——它是一种非常好的原型(prototype)和动态语言。如果您来自 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 是 Microsoft 专有的,但也不是很好。虽然 Javascript 在其他浏览器(如 FireBug)中添加了功能并获得了顶级调试工具,但 VBScript 仍然仅限 IE 并且几乎不可调试(IE4/5/6 中的开发工具不存在)。同时 VBScript 也扩展成为操作系统中一个非常强大的脚本工具,但这些功能在浏览器中都不可用(当它们出现时,它们变成了巨大的安全漏洞)。

仍然有一些公司内部应用程序使用 VBScript(并且一些依赖于这些安全漏洞),并且它们仍在运行 IE7(它们只是停止了 IE6,因为 MS 最终将其杀死)。

让 Javascript 达到目前的状态一直是一场噩梦,花了 20 年的时间。它仍然没有一致的支持,一些浏览器仍然缺少语言功能(1999 年指定)并且需要大量的填充程序。

添加用于在浏览器中解释的替代语言面临两个主要问题:

  • 让所有浏览器 vendor 实现新的语言标准——他们在 20 年里仍然没有为 Javascript 管理过的东西。
  • 第二种语言可能会削弱您已经拥有的支持,允许(例如)IE 拥有二流的 Javascript 支持,但(再次)很棒的 VBScript。我真的不想为不同的浏览器用不同的语言编写代码。

  • 应该注意的是,Javascript 并没有“完成”——它仍在不断发展,以便在新的浏览器中变得更好。 latest version比浏览器的实现早几年,他们正在研究下一个。

    关于javascript - JavaScript 的替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/930716/

    相关文章:

    html - 固定定位元素不适应窗口/视口(viewport)的宽度

    java - 从 eclipse 与浏览器运行 jar

    javascript - 记忆一下 DOM 中的 Jquery

    javascript - 在 d3 中具有类别的多线图表的 csv 中排列数据的最佳方法

    javascript - 生成子 Node 进程并将其通过管道传输到当前 Node 进程有什么用?

    delphi网络浏览器: how to prevent or hide that javascript error?

    c++ - 具有相同全局变量的两个浏览器插件中的段错误

    javascript - 对浏览器停止按钮单击执行操作

    javascript - 如何在javascript中取消转义html?

    javascript - 如何使命令在浏览器控制台中循环运行