简介

JavaScript 是面向 Web 的编程语言,绝大多数现代网站都使用了 JavaScript,并且所有的现代 Web 浏览器(电脑,手机,平板)均包含了 JavaScript 解释器。 这使得 JavaScript 能够称得上史上使用最广泛的编程语言。 JavaScript 也是前端开发工程师必须掌握的三种技能之一:描述网页内容的 HTML、描述网页样式的 CSS、以及描述网页行为的 JavaScript。

JavaScript 是一门 动态的、弱类型的、面向对象的、解释型的 编程语言,非常适合面向对象和函数式的编程风格。JavaScript 的语法来自于 Java,它的一等函数(first-class function)来自于 Scheme,它的基于原型(prototype-based)的继承来自于 Self。但学习本课程不必去了解那些(Java/Scheme/Slef)语言或熟悉那些术语。

JavaScript 起源

时间:1995年

人物:Brendan Eich(布兰登·艾奇)

背景:那个时候,绝大多数因特网用户都是用速度仅为28.8kbit/s的「猫」上网,为了完成简单的表单验证,必须把表单数据发送到服务器端才能确定用户是否没有填写某个必填域、是否输入了无效的值,每次操作需等待30秒以上才会有结果,这无疑是在慢性自杀。

事件:当时走在技术革新最前沿的 Netscape 公司指派 Brendan Eich 开发一种客户端语言,用来处理这种简单的验证,它就是 JavaScript。JavaScript 原名 LiveScript,Netscape 为了搭上媒体热炒 Java 的顺风车,才把 LiveScript 改名为 JavaScript。(所以 Java 和 JavaScript 的关系,就相当于雷锋和雷峰塔的关系。)

自此以后,JavaScript 逐渐成为市面上常见浏览器必备的一项特色功能。如今,JavaScript 的用途早已不再局限于简单的数据验证,而是具备了与浏览器窗口及其内容等几乎所有方面交互的能力。今天的 JavaScript 已经成为一门功能全面的编程语言,能够处理复杂的计算和交互,拥有了闭包、匿名(lambda,拉姆达)函数,甚至元编程等特性。

JavaScript 从一个简单的输入验证器发展成为一门强大的編程语言,完全出乎人们的意料。应该说,它既是一门非常简单的语言,又是一门非常复杂的语言。说它简单,是因为学会使用它只需片刻功夫;而说它复杂,是因为要真正掌握它则需要数年时间。

JavaScript 实现

随着 JavaScript 的普及,微软公司在 IE 浏览器中也加入了名为 JScript 的 JavaScript 实现,由于没有标准规定 JavaScript 的语法和特性,导致市面上存在多个版本的 JavaScript 实现,且互不兼容,因此 JavaScript 标准化问题被提上了议事日程。

1997年,欧洲计算机制造商协会(ECMA,European Computer Manufactures Association)定义了名为ECMAScript(发音为 ek-ma-script)的脚本语言标准,它是通用的,与平台无关的语言标准。自此以后,浏览器开发商开始致力于将 ECMAScript 作为各自 JavaScript 实现的基础。虽然基础相同,但具体实现在不同浏览器上却略有差异。

JavaScript 和 ECMAScript 通常被人们用来表达相同的含义,但 JavaScript 的含义却比 ECMAScript 中规定的要多得多。一个完整的 JavaScript 实现应该由下面三个不同的部分组成。

  • 核心(ECMAScript)
  • 文档对象模型(DOM)
  • 浏览器对象模型(BOM)

核心(ECMAScript)

ECMAScript 标准由 语法、数据类型、语句、关键字、保留字、运算符、对象 组成。它与 Web 浏览器没有任何依赖关系,并且这门语言本身并不包含输入和输出定义。ECMAScript 定义的只是这门语言的基础,而在此基础之上可以构建更完善的脚本语言。

Web 浏览器只是 ECMAScript 实现的宿主环境之一,其他宿主环境包括 Node 和 Adobe Flash。宿主环境不仅提供基本的 ECMAScript 实现,同时也会提供该语言的扩展(例如:DOM、BOM),这些扩展则利用 ECMAScript 的核心类型和语法提供更多更具体的功能。

JavaScript 是 Web 浏览器对 ECMAScript 标准的实现,ActionScript 是 Adobe Flash 对 ECMAScript 标准的实现。

ECMAScript 历史

1997年,ECMAScript 1版发布。

1998年6月,ECMAScript 2版发布。

1999年12月,ECMAScript 3版发布。

2000年,ECMAScript 4开始酝酿,最终这个版本没有通过。

2009年12月,ECMAScript 5版发布。

2011年6月,ECMAscript 5.1版发布,成为国际标准。

2015年6月,ECMAScript 6正式通过,成为国际标准。

扩展阅读「阮一峰 的《ECMAScript 6 入门》」
http://es6.ruanyifeng.com/#docs/intro

3.0版是一个巨大的成功,在业界得到广泛支持,成为通行标准,奠定了 JavaScript 语言的基本语法,以后的版本完全继承。直到今天,初学者一开始学习 JavaScript,其实就是在学3.0版的语法。

文档对象模型(DOM)

文档对象模型(DOM,Document Object Model)是用于 HTML 的应用程序编程接口(API),它把整个页面映射为一个多层节点结构。HTML 页面中的每个组成部分都是某种类型的节点,这些节点又包含着不同类型的数据。看下面这个 HTML 页面:

<html><head><title>Sample Page</title></head><body><p>Hello World!</p></body>
</html>

通过 DOM 创建的这个表示文档的树形图,开发人员获得了控制页面内容和结构的主动权。借助 DOM 提供的 API,开发人员可以轻松自如地删除、添加、替换或修改任何节点。

由于 Netscape 和 微软实现的 DOM 互不兼容,负责制定 Web 通信标准的 W3C(World Wide Web Consortium,万维网联盟)开始着手规划 DOM。

DOM 1级:

  • DOM 核心:映射文档结构,简化对文档中任意部分的操作和访问。
  • DOM HTML:在 DOM 核心的基础上,添加了针对 HTML 的对象和方法。

DOM 2级:

  • DOM 视图:定义了跟踪不同文档视图的接口。
  • DOM 事件:定义了事件和事件处理的接口。
  • DOM 样式:定义了基于 CSS 为元素应用样式的接口。
  • DOM 遍历和范围:定义了遍历和操作文档树的接口。

DOM 3级:

  • DOM 加载和保存:引入了以统一方式加载和保存文档的方法。
  • DOM 验证:新增了验证文档的方法。
  • DOM 核心扩展。

注意:
1. DOM 并不是只针对 JavaScript 的,很多别的语言也都实现了 DOM。
2. DOM 0级标准是不存在的,它只是 DOM 历史坐标中的一个参照点而已。

浏览器对象模型(BOM)

浏览器对象模型(BOM,Browser Object Model)是用于浏览器的应用程序编程接口(API),它把整个浏览器窗口映射为一个对象。从根本上讲,BOM 只处理浏览器窗口和框架,但人们习惯上也把所有针对浏览器的 JavaScript 扩展算作 BOM 的一部分,例如:

  • 弹出新浏览器窗口的功能。
  • 移动、缩放和关闭浏览器窗口的功能。
  • 提供浏览器详细信息的 navigator 对象。
  • 提供浏览器所加载页面的详细信息的 localtion 对象。
  • 提供用户显示器分辨率详细信息的 screen 对象。
  • 对 cookies 的支持。
  • XMLHttpRequest 和 IE 的 ActiveXObject 这样的自定义对象。

BOM 最让人头疼的是没有相关的规范和标准,每个浏览器都有独有的实现,这个问题在 HTML5 中得到了解决,HTML5 致力于把很多 BOM 功能写入正式规范。

小结

JavaScript 是一种专为网页交互而设计的脚本语言,由下列3个不同的部分组成:

  • 核心(ECMAScript),由 ECMA-262 定义,提供核心语言功能。
  • 文档对象模型(DOM),提供访问和操作网页内容的方法和接口。
  • 浏览器对象模型(BOM),提供与浏览器交互的方法和接口。

JavaScript 的这3个组成部分,在当前5个主要浏览器(IE、FireFox、Chrome、Safari 和 Opera)中都得到了不同程度的支持。其中,所有浏览器对 ECMAScript 3 版本的支持大体上都还不错,而对 ECMAScript 5 的支持程度越来越高,但对 DOM 的支持则彼此相差比较多。对于已经正式纳入 HTML5 标准的 BOM 来说,尽管各浏览器都实现了某些众所周知的共同特性,但其他特性还是会因浏览器而异。

扩展阅读「Standard ECMA-262 5.1 Edition 」
http://www.ecma-international.org/ecma-262/5.1/

扩展阅读「ECMAScript 5 浏览器兼容一览表」
http://caniuse.mojijs.com/Home/Html/item/key/es5/index.html

更多

关注微信公众号「劼哥舍」回复「答案」,获取关卡详解。
关注 https://github.com/stone0090/javascript-lessons,获取最新动态。

《JavaScript 闯关记》之简介相关推荐

  1. [iBoard 电子学堂][第八卷 设计任意波发生器]第一篇 iBoard 任意波发生器简介

    一.我所知道的信号发生器   信号发生器,通俗也称为信号源.顾名思义,信号发生器是用于产生特定参数电信号的电子装置.信号发生器是一个庞大的概念,根据不同的分类依据,可以划分出不同的类型.如依输出频率高 ...

  2. 《iBoard 是什么》之简介

    -------------------------------------------------------------------- 关于 <iBoard 电子学堂> <iBoa ...

  3. [iBoard 电子学堂][第二卷 C程序设计语言 ]第一篇 C语言简介

    一.C语言发展史   C语言是一种程序设计语言,由于它既有高级语言的特性,又有低级语言的特性,所以它既能编写基于操作系统的大型应用程序,也能编写直接操作硬件的程序,也就是我们称之为"裸奔&q ...

  4. [黑金原创教程][连载][iBoard 电子学堂][第八卷 设计任意波发生器]第一篇 iBoard 任意波发生器简介...

    一.我所知道的信号发生器 信号发生器,通俗也称为信号源.顾名思义,信号发生器是用于产生特定参数电信号的电子装置.信号发生器是一个庞大的概念,根据不同的分类依据,可以划分出不同的类型.如依输出频率高低, ...

  5. [黑金原创教程][连载][iBoard 电子学堂][第八卷 设计任意波发生器]第三篇 直接数字合成(DDS)原理...

    一.什么是频率 频率是指单位时间内某事件重复的次数.在电子学中,信号的频率是指单位时间内信号的周期数,单位是赫兹(Hertz,简称Hz).很多年前有一个著名的德国物理学家海因里希 · 鲁道夫 · 赫兹 ...

  6. 【液晶模块系列基础视频】4.5.X-GUI图形界面库-进度条等函数简介

    [液晶模块系列基础视频]4.5.X-GUI图形界面库-进度条等函数简介 ============================== 技术论坛:http://www.eeschool.org 博客地址 ...

  7. 《iBoard 电子学堂》SPI Flash烧写方法

    <iBoard 电子学堂>通过外部串行FLASH 存储完整的汉字字库和开机画面:本文介绍通过软件 iBoard ToolBox 利用USB (标准 HID 驱动)接口,烧写汉字字库以及开机 ...

  8. 【iBoard 电子学堂】【iHMI43】演示实例之:电参数测试仪演示工程

    _____________________________________ 深入交流QQ群: A: 204255896(500人超级群,满员) B: 165201798(500人超级群,满员) C: ...

  9. etcd 笔记(01)— etcd 简介、特点、应用场景、常用术语、分布式 CAP 理论、分布式原理

    1. etcd 简介 etcd 官网定义: A highly-available key value store for shared configuration and service discov ...

  10. Docker学习(一)-----Docker简介与安装

    一.Docker介绍 1.1什么是docker Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源 Docker可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植 ...

最新文章

  1. 深入浅出 MyBatis 的一级、二级缓存机制
  2. 从现在到未来50年,传感器将如何改变世界?
  3. 专家观点 | 李德仁:基于云计算的智慧城市运营脑
  4. OEM/ODM指的是什么?
  5. X-UA-Compatible 1
  6. Java黑皮书课后题第7章:*7.7(统计个位数的数目)编写一个程序,生成0和9之间的100个随机整数,然后显示每一个数出现的次数
  7. 在Linux系统的命令行中为MySQL创建用户的方法
  8. javascript简易缓动插件
  9. select case语句_图解Go select语句原理
  10. [BuildRelease Management]buildbot
  11. 贡献一个新浪的幻灯片(javascript)
  12. mysql 建模工具 mac_MySQL Workbench for Mac 6.0 下载 - Mac上优秀的数据库建模工具 | 玩转苹果...
  13. ssm框架整合以及登录案例
  14. 把数字翻译成英文声明.C语言,如何把数字翻译成英文
  15. NOIP常考模板粗略集合包
  16. [生存志] 第3节 序 汉字的韵脚和格律(下)
  17. upc组队赛6 Bumped!【最短路】
  18. windows悬浮按钮_如何在Windows 10上配置笔及其按钮
  19. 第11期 DApp 榜单:这是一篇让DD君重伤住院的内容
  20. 【SQLServer】常用时间格式转换

热门文章

  1. 如何root安卓手机_不花钱教程:安卓手机root刷机
  2. Android开发学习路线图-腾讯课堂码牛学院
  3. 使用Java获得汉字的全拼与简拼
  4. 科大讯飞的2022:夯实“根据地”业务,以技术创新点燃大模型产业落地的“星星之火”...
  5. [论文笔记] DETR 论文笔记
  6. java一只母牛 一年生头小牛_面向对象思想 解决农场母牛生小牛问题
  7. 转行python能拿到多少_记录:一个自学Python小白的转行经历,现如今终于拿到了理想中的15K...
  8. 【Python面试题】-设计模式
  9. 温室温度预测方案总结(万文详解)
  10. Gentel的一些基本操作