【问题标题】:Why is JavaScript called a "scripting language"?为什么 JavaScript 被称为“脚本语言”?
【发布时间】:2010-11-01 09:25:59
【问题描述】:

正如标题所说,我想知道 JavaScript 被称为“脚本语言”的确切原因?

我的理解是因为 JavaScript 仅由浏览器解释(而不是编译)。如果我错了,请纠正我。

但是如果没有编译,那么0 == '' 怎么会是真的呢?编译器不会强制这些值,还是 JavaScript 引擎......?我有点困惑。

【问题讨论】:

    标签: javascript scripting


    【解决方案1】:

    我觉得wikipedia的前两句话已经够清楚了:

    一种脚本语言,脚本语言 或扩展语言是一种编程 允许某种控制的语言 单个或多个软件 应用程序。选择的语言 编写脚本的目的通常很多 比使用的语言更高级 宿主应用程序...

    在这种情况下,应用程序是浏览器。关于编译:

    脚本是 经常但不总是从源头解释 代码或“半编译”为字节码 这是解释,不像 它们关联的应用程序, 传统上编译为 系统的本机机器代码 他们运行的

    关于0等于'',它的强制转换不一定是编译器实现的;一切都与运行时的 JavaScript 引擎有关。

    我很抱歉从 Wikipedia 上拿走了所有内容,但它很清楚,我把它引用了

    PS:我觉得也值得贴一下:

    许多人查看“脚本”语言 不如或在某种程度上不同于 尚未达到的语言 脚本界的人气。 具有讽刺意味的是,这些相同的语言 精心挑选的脚本,因为 它们的质量和多功能性。

    【讨论】:

    • 感谢 victor 帮助我..但是关于我的第二个问题的任何信息?
    • 在 Javascript 中 == 尝试将 RHS 的类型转换到左侧,如果它们不相等。由于这个原因 '' == 0 是假的,但 0 == '' 是真的。同样的错误 == '0' 为真。最好使用 === 和 !==
    • 指出this answer 很重要,因为最近的 Node.js 改变了这个旧答案的上下文
    【解决方案2】:

    你说对了一部分。脚本语言基本上是一种不能独立存在的语言。它“编写”另一个应用程序(在本例中为浏览器)。我认为您正在考虑的是一种解释性语言。这实质上意味着它没有被编译(至少不是传统意义上的),它是从源代码“解释”的。您的示例实际上与编译无关。从字符串到整数的类型转换是在运行时完成的。

    【讨论】:

    • 为了清楚起见——脚本语言可以用于操作系统而不是“应用程序”(输入关于外壳是否构成应用程序的参数):)
    • 感谢您的意见。我现在明白了。
    【解决方案3】:

    2017 年更新

    “脚本语言很像淫秽。我无法定义它,但我看到它就会知道。” - 拉里沃尔

    出于本答案的目的,我们假设它表示一种语言:

    1. 缺少“真实”语言的某些特性(无论这意味着什么),因此作为系统中其他组件之间的“粘合剂”最为有用,并且
    2. 被解释而不是编译。

    Javascript 确实曾一度被认为是一种脚本语言,具有操作 DOM、执行表单验证和让耶稣起舞的基本功能。它是由interpreter 直接从源代码执行的。

    但 JS 在过去几年中已经相当成熟,其高级功能如 lambda、类(无论好坏)、解构、迭代器和模块使其功能与大多数其他现代语言相当。不再局限于浏览器,它是否也常见于 NodeJS 下的服务器上独立运行。

    Javascript 现在普遍采用 JIT 编译方式,可以编译为字节码(如 Java 和 C#),也可以直接编译为机器码(如 C 和 C++)。现代引擎提供了一个优化阶段,类似于大多数传统的编译语言。

    V8(Chrome,节点)

    V8 在执行前将 JavaScript 直接编译为native machine code

    脉轮代码(边缘)

    脉轮核心 [可以] 做parallel JIT compilation...

    蜘蛛猴(火狐)

    SpiderMonkey 38 包含一个即时编译器 (JIT),compiles JavaScript to machine code...

    因此,如果现代 JS 被视为一种脚本语言,那么这同样适用于大多数其他非“脚本”语言。

    【讨论】:

    • 这是最好的答案,因为它实际上解释了为什么 JavaScript 最初是作为一种脚本语言(与 html 一起发送以在页面加载时作为脚本运行)但已经发展成为一种具有通用性的语言(并且显然很强大)用例。
    【解决方案4】:

    了解为什么 JavaScript 是一种脚本语言?首先,我们了解为什么 Java 不是脚本语言。

    我认为脚本是指一个项目、游戏等的书面文本,玩家可以直接阅读,玩家和脚本之间没有解释器。

    在 JavaScript 中的想法相同,我们的程序就像写在记事本或任何其他文本页面(如 EditPlus)上的戏剧或电影,浏览器直接通过 JavaScript 引擎读取,不需要编译器和解释器来显示浏览器上的输出,浏览器就像一个播放器。

    但是 Java 需要编译器和解释器才能将编写的 Java 编码转换为计算机可读格式并显示输出。所以 Java 不是一种脚本语言,而 JavaScript 是一种脚本语言。

    这个描述是我对为什么 JavaScript 是一种脚本语言的看法。 我试图通过实际使用来理解这个问题。我觉得你很满意。

    【讨论】:

    • 我觉得这个答案没有帮助,而且我认为“脚本”这个词太字面意思了。我看不出“编写”浏览器的 Javascript 程序和“编写”所连接的 TTY 的 C 程序之间没有区别。
    【解决方案5】:

    它是一种解释性语言,在访问时被沙盒化并用于特定目的。

    这意味着:

    • 运行时解释,不编译
    • 通常通过特定的 API 授予它对系统的有限访问权限
    • 通常只提供有助于其实现预期目的的 API 调用,仅此而已(尽管可以使用第三方添加)

    【讨论】:

    • 实际上是在运行时编译成字节码。它只是发生得很快。像 Javascript 这样的解释语言,这有时被称为即时 (JIT) 编译器,所以基本上它是“编译的”
    • “它在运行时被解释,它没有被编译” - 这在过去可能是正确的,但是现代 JS 引擎执行编译。 “它被授予对系统的有限访问权限,通常是通过特定的 API”——Java 也是如此。 “......虽然可以使用第三方添加” - 对于 .NET(例如 PInvoke)也可以这样说。
    【解决方案6】:

    脚本语言的概念是指示宿主执行一系列动作(很像演员从脚本中朗读)。

    Javascript 告诉浏览器该做什么以及如何处理事情,就像 shell 脚本、php 或任何其他脚本语言为它们各自的主机所做的一样。

    【讨论】:

    • “与 shell 脚本、php 或任何其他脚本语言对它们各自的主机执行的方式相同” - C# 也可以这样说(这里的主机是 CLR)。
    猜你喜欢
    • 2017-07-19
    • 1970-01-01
    • 2018-11-02
    • 2012-11-01
    • 2011-10-01
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    相关资源
    最近更新 更多