跳转到内容

JavaScript/与其他语言的关系

来自维基教科书,自由的教科书,来自一个开放的世界




如果你有其他语言的编程经验或培训,学习 JS 会更容易,但也更难。尤其是 JS 属于 C 家族语言(C、C++、Java 等)这一事实,可能会同时带来帮助和困惑。它使用常见的语法,但实现的概念与其他家族成员不同。因此,它可能会用类似 C 或 Java 的语法吸引你。但在其本质上,它是一个完全不同的东西。它的语义和设计受到 SelfScheme 编程语言的影响。

对于 C 或 Java 程序员来说,容易的部分是学习语法。流程控制、逻辑和算术的大部分内容都是相同的。在深入研究这门语言后,你会注意到一些差异。以下是与 Java 的一些区别

变量的行为

[edit | edit source]

从最明显的开始,JS 是一种弱类型语言。这有几个含义

  • 整数和浮点数都用 64 位浮点数表示(但奇怪的是,位运算仍然可用,有时速度更快)。
  • 你可以随意更改变量的类型。
  • 对象由键值对组成,称为“属性”。值可以更改,并且可以随意添加或删除对象的完整属性。

这个列表还在继续,我们被赋予了非凡的力量,可以在编程时做一些奇妙而有时非常愚蠢的事情。因此,在试图驾驭动态变量的力量时,保持清醒的头脑非常重要。

变量的作用域

[edit | edit source]
  • 从模块到模块:在 Java 中,关键字publicprivateprotected定义了变量对其他模块(类)的可见性。在 JS 中,只有简单的export/import 或者 module.exports/require 机制。
  • 在模块内:在 JS 中,模块内的可见性由关键字var(已过时,不再使用)、letconst定义。Java 也知道关键字var,但它的语义略有不同。JS 的const 等同于 Java 的final
  • 在块内:“块”是被大括号 {} 包围的代码序列。变量关于块的可见性在 JS(使用letconst)和 Java 中是相同的:变量在定义块和包含的块内可见,但在定义块之外不可见。
  • 闭包闭包是一个 - 匿名或命名 - 函数,它可以引用其封闭上下文的变量。在这种情况下,函数在创建时“看到”变量的值,而不是在它被调用时“看到”的值。JS 从一开始就使用了这个概念。Java 使用类似但并不完全相同的技术来访问外部上下文的变量:内部类和 lambda 表达式。

与 Java 不同,JS 是一种无类语言。相反,JS 使用原型来实现面向对象的特性,例如继承。类可以模拟,但这只是“语法糖”,如果你从脑海中去除类的概念,学习过程会变得更容易。

华夏公益教科书