什么是 Javascript ?

回答一些像“它是什么?”和“它能做什么?”的问题 。

一个宏观的定义

JavaScript 是允许你在网页中实现复杂效果的一门编程语言 —— 每次浏览网页时,我们看到的不只是显示静态信息,而是会看到即时更新的内容,交互式的地图,或 2D/3D 图形动画,又或者自动播放视频等,实现这些动态效果,就会用到 JavaScript 。JS 属于 Web 技术的三层蛋糕之一,另外的两个是 HTML 和 CSS 。

  • HTML 是一种标记语言,用来结构化我们的网页内容和赋予内容含义,例如定义段落、标题、和数据表,或在页面中嵌入图片和视频。

  • CSS 是一种样式规则语言,我们将样式应用于我们的 HTML 内容, 例如设置背景颜色和字体,在多个列种布局我们的内容。

  • JavaScript 是一种编程语言,允许你创建动态更新的内容,控制多媒体,图像动画,和一些其他的东西。

JS 可以做什么?

首先 JS 是一种编程语言,可以做一般的编程语言都可以做的那些事:

  • 在变量中储存值
  • 对一段文本(在编程中被称为“字符串”)进行操作。
  • 响应在网页中发生的特定事件。

然而更令人兴奋的是建立在 JavaScript 语言的核心之上的功能。在你的 JavaScript 代码里,被称为应用程序编程接口 [Application Programming Interfaces (APIs)] 的功能会提供额外的超能力给你使用。

APIs 是已经封装好的一套代码组件,目的是让开发者可以实现各种功能。它们的作用就像是已经制作好的家具套件对家居建设的作用一样,——从一堆已经切好的木板开始组装一个书柜,显然比自己设计,寻找合适的木材,裁切至合适的大小和形状,找到合适大小的螺丝钉,然后组装成一个书柜要简单得多。

API 的分类

API 通常分成两类。

浏览器 APIs (Browser APIs) 浏览器自带的,例如:

  • 文档对象模型 API [DOM (Document Object Model) API] 允许你操作 HTML 和 CSS,创建,移除和修改 HTML,动态地应用新的样式到你的页面,等等。比如说每次你在一个页面里看到一个弹出窗口,或者显示一些新的内容,这就是 DOM 在运作。
  • 地理定位 API [Geolocation API] 获取地理信息。这就是为什么谷歌地图 [Google Maps] 可以找到你的位置,而且标示在地图上。
  • 画布 [Canvas] 和 WebGL APIs 允许你创建生动的 2D 和 3D 图像。
  • 音像和影像 APIs [Audio and Video APIs],像 HTMLMediaElement 和 WebRTC 允许你运用多媒体去做一些非常有趣的事情,比如在网页中播放音像和影像,或者从你的网页摄像头中获取获取录像,然后在其他人的电脑上展示。

第三方 APIs (Third party APIs) 默认是没有安装到浏览器中的,通常需要从网络上的某些地方取得它们。举个例子:

  • 推特 API [Twitter API] 允许你做一些像是在你的网站上展示你的最新推送之类的事情。
  • 谷歌地图 API [Google Maps API] 允许你去嵌入定制的地图到你的网站。

解释型语言 vs 编译型语言

你或许听说过这两个术语 解释 [interpreted]编译 [compiled]。JavaScript 是一个解释型语言。在浏览器运行代码前,你不必先把它转化为其他形式。

编译语言则需要在运行前转化为另一种形式。比如说 C/C++ 则要先被编译成汇编语言,然后再由电脑运行。

服务器端代码 vs 客户端代码

你或许也听说过 服务器端 [server-side]客户端 [client-side] 代码这两个术语,尤其是在网页开发的语境中。

客户端代码是在用户的电脑上运行的代码——当浏览一个网页时,这个网页的客户端代码就会被下载,然后由浏览器来运行和展示。传统上 JS 被认为是写客户端代码的一种语言,但是从 nodejs 诞生后,JS 用来写服务器端代码也变得非常常见了。

服务器端代码在服务器上运行,然后它的结果会由浏览器进行下载和展示。流行的服务器端网页语言包含以下几个例子:PHP, Python, Ruby, ASP.NET 和 JavaScript!JavaScript 同时也能用作服务器端语言,比如说在流行的 Node.js 环境中。

动态网站和静态网站

动态 [dynamic] 它指的是能不同环境下显示不同事物,当有需要时产生新内容的能力。服务器端代码会动态地在服务器上产生新的内容,比如说从数据库中提取信息。反之,客户端 JavaScript 则在用户的浏览器中动态地生成新的内容,比如说创建一个新的 HTML 表格,从中插入从服务器请求到的数据,然后在已经向用户展示了的网页中显示这个表格。在这两个语境中,动态的意义有细微的不同,但是有联系,而且两种方法(服务器端和客户端)通常是在一起工作的。

一个没有动态更新内容的网页被指作 静态 [static] ——它只会一直显示一样的内容。