第一章
JavaScript概述
JavaScript是现今非常流行的编程语言之一,在编程语言排行榜上也是数一数二的存在,如果你现在去搜编程语言榜单,你会发现,JavaScript现在是在第一名的位置。在经过了这么些年的发展,JavaScript已经在软件行业里占据了一壁江山。同时,JavaScript现在已经有很多的框架和库,不仅仅是在Web前端,在Web后端也有其身影的存在,也就是说,现在JavaScript有客户端运行机制,也有服务器端的运行机制。目前JavaScript在Web软件行业里已经深耕发展了,对于Web的开发及发展,其起到了非常重要的作用。
1. JavaScript简介。
JavaScript(简称“JS”) 是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。虽然它是作为开发Web页面的脚本语言而出名,但是它也被用到了很多非浏览器环境中,JavaScript 基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式、声明式、函数式编程范式。JavaScript 是互联网上最流行的脚本语言,这门语言可用于 HTML 和 web,更可广泛用于服务器、PC、笔记本电脑、平板电脑和智能手机等设备。
JavaScript的标准是ECMAScript 。截至 2012 年,所有浏览器都完整的支持ECMAScript 5.1,旧版本的浏览器至少支持ECMAScript 3 标准。2015年6月17日,ECMA国际组织发布了ECMAScript的第六版,该版本正式名称为 ECMAScript 2015,但通常被称为ECMAScript 6 或者ES2015。
JavaScript最初由Netscape的Brendan Eich设计,最初将其脚本语言命名为LiveScript,后来Netscape在与Sun合作之后将其改名为JavaScript。JavaScript最初受Java启发而开始设计的,目的之一就是“看上去像Java”,因此语法上有类似之处,一些名称和命名规范也借自Java,但JavaScript的主要设计原则源自Self和Scheme。JavaScript与Java名称上的近似,是当时Netscape为了营销考虑与Sun微系统达成协议的结果。微软同时期也推出了JScript来迎战JavaScript的脚本语言。
发展初期,JavaScript的标准并未确定,同期有Netscape的JavaScript,微软的JScript和CEnvi的ScriptEase三足鼎立。为了互用性,Ecma国际(前身为欧洲计算机制造商协会)创建了ECMA-262标准(ECMAScript),两者都属于ECMAScript的实现,尽管JavaScript作为给非程序人员的脚本语言,而非作为给程序人员的脚本语言来推广和宣传,但是JavaScript具有非常丰富的特性。 1997年,在ECMA(欧洲计算机制造商协会)的协调下,由Netscape、Sun、微软、Borland组成的工作组确定统一标准:ECMA-262。
JavaScript是甲骨文公司的注册商标。Ecma国际以JavaScript为基础制定了ECMAScript标准。JavaScript也可以用于其他场合,如服务器端编程(Node.js)。它的解释器被称为JavaScript引擎,作为浏览器的一部分,广泛用于客户端的脚本语言,用来给HTML网页增加动态功能。
JavaScript 是脚本语言:
l JavaScript 是一种轻量级的编程语言。
l JavaScript 是可插入 HTML 页面的编程代码。
l JavaScript 插入 HTML 页面后,可由所有的现代浏览器执行。
l JavaScript 很容易学习。
JavaScript由下列三部分组成:
l ECMAScript语法
l 文档对象模型(DOM Document Object Model)
l 浏览器对象模型(BOM Browser Object Model)
JavaScript主要功能:
l 嵌入动态文本于HTML页面。
l 对浏览器事件做出响应。
l 读写HTML元素。
l 在数据被提交到服务器之前验证数据。
l 检测访客的浏览器信息。 控制cookies,包括创建和修改等。
l 基于Node.js技术进行服务器端编程。
JavaScript脚本语言具有以下特点:
l 脚本语言。JavaScript是一种解释型的脚本语言,C、C++等语言先编译后执行,而JavaScript是在程序的运行过程中逐行进行解释。
l 基于对象。JavaScript是一种基于对象的脚本语言,它不仅可以创建对象,也能使用现有的对象。
l 简单。JavaScript语言中采用的是弱类型的变量类型,对使用的数据类型未做出严格的要求,是基于Java基本语句和控制的脚本语言,其设计简单紧凑。
l 动态性。JavaScript是一种采用事件驱动的脚本语言,它不需要经过Web服务器就可以对用户的输入做出响应。在访问一个网页时,鼠标在网页中进行鼠标点击或上下移、窗口移动等操作JavaScript都可直接对这些事件给出相应的响应。
l 跨平台性。JavaScript脚本语言不依赖于操作系统,仅需要浏览器的支持。因此一个JavaScript脚本在编写后可以带到任意机器上使用,前提是机器上的浏览器支 持JavaScript脚本语言,JavaScript已被大多数的浏览器所支持。
l 不同于服务器端脚本语言,例如PHP与ASP,JavaScript主要被作为客户端脚本语言在用户的浏览器上运行,不需要服务器的支持。所以在早期程序员比较倾向于使用JavaScript以减少对服务器的负担,而与此同时也带来另一个问题,安全性。而随着服务器的强壮,虽然程序员更喜欢运行于服务端的脚本以保证安全,但JavaScript仍然以其跨平台、容易上手等优势大行其道。同时,有些特殊功能(如AJAX)必须依赖JavaScript在客户端进行支持。
JavaScript已经被Netscape公司提交给ECMA制定为标准,称之为ECMAScript,标准编号ECMA-262。最新版为ECMAScript 6。符合ECMA-262 3rd Edition标准的实现有:
l Microsoft公司的JScript.
l Mozilla的JavaScript-C(C语言实现),现名SpiderMonkey
l Mozilla的Rhino(Java实现)
l Digital Mars公司的DMDScript
l Google公司的V8
l WebKit
JavaScript版本
版本 |
发布日期 |
基于 |
Netscape Navigator |
Mozilla Firefox |
Internet Explorer |
Opera |
Safari |
Google Chrome |
1.0 |
1996年3月 |
- |
2.0 |
- |
- |
- |
- |
- |
1.1 |
1996年8月 |
- |
3.0 |
- |
3.0 |
- |
- |
- |
1.2 |
1997年6月 |
- |
4.0-4.05 |
- |
- |
- |
- |
- |
1.3 |
1998年10月 |
ECMA-262 1 edition / ECMA-262 2 edition |
4.06-4.7x |
- |
4.0 |
- |
- |
- |
1.4 |
- |
- |
Netscape Server |
- |
- |
- |
- |
- |
1.5 |
2000年11月 |
ECMA-262 3 edition |
6.0 |
1.0 |
5.5 (JScript 5.5), 6 (JScript 5.6), 7 (JScript 5.7), 8 (JScript 6) |
6.0, 7.0, 8.0, 9.0 |
- |
- |
1.6 |
2005年11月 |
1.5 + Array extras + Array and String generics + E4X |
- |
1.5 |
- |
- |
3.0, 3.1 |
- |
1.7 |
2006年10月 |
1.6 + Pythonic generators + Iterators + let |
- |
2.0 |
- |
- |
3.2, 4.0 |
1.0 |
1.8 |
2008年6月 |
1.7 + Generator expressions + Expression closures |
- |
3.0 |
- |
11.50 |
- |
- |
1.8.1 |
- |
1.8 + Native JSON support + Minor Updates |
- |
3.5 |
- |
- |
- |
- |
1.8.2 |
2009年6月22日 |
1.8.1 + Minor updates |
- |
3.6 |
- |
- |
- |
- |
1.8.5 |
2010年7月27日 |
1.8.1 + ECMAScript 5 Compliance |
- |
4 |
9 |
11.60 |
- |
- |
ES2015 |
2015年 |
ECMAScript 2015 |
- |
- |
- |
- |
- |
- |
ECMAScript是一种由Ecma国际(前身为欧洲计算机制造商协会,European Computer Manufacturers Association)通过ECMA-262标准化的脚本程序设计语言。这种语言在万维网上应用广泛,它往往被称为javascript或jscript,所以它可以理解为是JavaScript的一个标准,但实际上后两者是ECMA-262标准的实现和扩展。
ECMAScript(ES)版本介绍(版本发布时间)
时间 |
版本 |
说明 |
1997年6月 |
ES1.0 发布 |
当年7月,ECMA262 标准出台 |
1998年6月 |
ES2.0 发布 |
该版本修改完全符合ISO/IEC 16262国际标准。 |
1999年12月 |
ES3.0 发布 |
成为 JavaScript 的通行标准,得到了广泛支持 |
2007年10月 |
ES4.0草案发布 |
各大厂商意见分歧,该方案未通过 |
2008年7月 |
发布ES3.1,并改名为ECMAScript 5 |
废除ECMAScript 4.0,所以4.0版本不存在 |
2009年12月 |
ES 5.0 正式发布 |
|
2011年6月 |
ES5.1 发布 |
该版本成为了 ISO 国际标准(ISO/IEC 16262:2011) |
2013年12月 |
ES6 草案发布 |
|
2015年6月 |
ES6 正式发布,并且更名为“ECMAScript 2015” |
TC39委员会决定每年发布一个ECMAScript 的版本 |
2016年6月 |
ES7 发布,又名“ECMAScript 2016” |
|
2017年6月 |
ES8 发布,又名“ECMAScript 2017” |
|
2018年6月 |
ES9 发布,又名“ECMAScript 2018” |
|
2019年6月 |
ES10 发布,又名“ECMAScript 2019” |
|
规范地址:
l ES6:Http://www.ecma-international.org/ecma-262/6.0/
l ES7:http://www.ecma-international.org/ecma-262/7.0/
l ES8:http://www.ecma-international.org/ecma-262/8.0/
l ES9:http://www.ecma-international.org/ecma-262/9.0/
l ES10:http://www.ecma-international.org/ecma-262/10.0/
JavaScript和ECMAScript的关系
l JavaScript是脚本语言,ECMAScript是规范。JavaScript是基于ECMAScript规范的脚本语言。
l JavaScript只是ECMAScript的其中一种实现,除此之外还有其他的实现。
专业名词补充说明:
Ecma国际(Ecma International):是一家国际性会员制度的信息和电信标准组织,1994之前,名为欧洲计算机制造商协会(European Computer Manufacturers Association)
TC39(Technical Committee 39): ESMA的第39号技术专家委员会,负责制订ECMAScript标准,成员包括Microsoft、Mozilla、Google等大公司。
ISO : 国际标准化组织(International Organization for Standardization)
IEC: 国际电工委员会, 成立于1906年,它是世界上成立最早的国际性电工标准化机构,负责有关电气工程和电子工程领域中的国际标准化工作。
ISO/IEC 16262:2011: 既符合ISO也符合IEC标准的ECMAScript语言规范。目前已经被 ISO/IEC 22275:2018重新修订。
ECMAScript(简称: ES):一种由Ecma国际(前身为欧洲计算机制造商协会)按照ECMA-262和ISO/IEC 16262标准制定的一种脚本语言规范。
ECMA-262: 定义了ECMAScript支持的一套关键字,这些关键字标识了ECMAScript语句的开头和结尾,根据规定,关键字是保留的,不能用作变量名或函数名。
ECMA 402: 制定一些基于 ECMAScript 5 或者之后版本的一些国际化 api 标准。
ECMA 404:JSON 规范。
ECMA 414:规定了哪些规范是和 ECMAScript 有关的。目前内部就包含了 262,402和404。
2. JavaScript的历史。
它是由Netscape公司的Brendan Eich用10天设计出来一门脚本语言,JavaScript是甲骨文公司的注册商标。完整的JavaScript实现包含三个部分:ECMAScript,文档对象模型,浏览器对象模型。
Netscape在最初将其脚本语言命名为LiveScript,后来Netscape在与Sun合作之后将其改名为JavaScript。JavaScript最初受Java启发而开始设计的,目的之一就是“看上去像Java”,因此语法上有类似之处,一些名称和命名规范也借自Java。但JavaScript的主要设计原则源自Self和Scheme。JavaScript与Java名称上的近似,是当时Netscape为了营销考虑与Sun微系统达成协议的结果。为了取得技术优势,微软推出了JScript来迎战JavaScript的脚本语言。两者都属于ECMAScript的实现,为了互用性,ECAM(欧洲计算机制造商协会)创建了ECMA-262标准(ECMAScript)。ECMAScript最新版本是2015发布的 ECMAScript 6(ES6)。
l Nombas 和 ScriptEase
大概在 1992 年,一家称作 Nombas 的公司开发了一种叫做 C 减减(C-minus-minus,简称 Cmm)的嵌入式脚本语言。Cmm 背后的理念很简单:一个足够强大可以替代宏操作(macro)的脚本语言,同时保持与 C (和 C ++)足够的相似性,以便开发人员能很快学会。这个脚本语言捆绑在一个叫做 CEnvi 的共享软件中,它首次向开发人员展示了这种语言的威力。
Nombas 最终把 Cmm 的名字改成了 ScriptEase,原因是后面的部分(mm)听起来过于消极,同时字母 C “令人害怕”。
现在 ScriptEase 已经成为了 Nombas 产品背后的主要驱动力。
l Netscape 发明了 JavaScript
当 Netscape Navigator 崭露头角时,Nombas 开发了一个可以嵌入网页中的 CEnvi 的版本。这些早期的试验被称为 Espresso Page(浓咖啡般的页面),它们代表了第一个在万维网上使用的客户端语言。而 Nombas 丝毫没有料到它的理念将会成为万维网的一块重要基石。
当网上冲浪越来越流行时,对于开发客户端脚本的需求也逐渐增大。此时,大部分因特网用户还仅仅通过 28.8 kbit/s 的调制解调器连接到网络,即便这时网页已经不断地变得更大和更复杂。而更加加剧用户痛苦的是,仅仅为了简单的表单有效性验证,就要与服务器进行多次地往返交互。设想一下,用户填完一个表单,点击提交按钮,等待了 30 秒的处理后,看到的却是一条告诉你忘记填写一个必要的字段。
那时正处于技术革新最前沿的 Netscape,开始认真考虑开发一种客户端脚本语言来解决简单的处理问题。
当时工作于 Netscape 的 Brendan Eich,开始着手为即将在 1995 年发行的 Netscape Navigator 2.0 开发一个称之为 LiveScript 的脚本语言,当时的目的是在浏览器和服务器(本来要叫它 LiveWire)端使用它。Netscape 与 Sun 及时完成 LiveScript 实现。
就在 Netscape Navigator 2.0 即将正式发布前,Netscape 将其更名为 JavaScript,目的是为了利用 Java 这个因特网时髦词汇。Netscape 的赌注最终得到回报,JavaScript 从此变成了因特网的必备组件。
l 三足鼎立
因为 JavaScript 1.0 如此成功,Netscape 在 Netscape Navigator 3.0 中发布了 1.1 版。恰巧那个时候,微软决定进军浏览器,发布了 IE 3.0 并搭载了一个 JavaScript 的克隆版,叫做 JScript(这样命名是为了避免与 Netscape 潜在的许可纠纷)。微软步入 Web 浏览器领域的这重要一步虽然令其声名狼藉,但也成为 JavaScript 语言发展过程中的重要一步。
在微软进入后,有 3 种不同的 JavaScript 版本同时存在:Netscape Navigator 3.0 中的 JavaScript、IE 中的 JScript 以及 CEnvi 中的 ScriptEase。与 C 和其他编程语言不同的是,JavaScript 并没有一个标准来统一其语法或特性,而这 3 种不同的版本恰恰突出了这个问题。随着业界担心的增加,这个语言的标准化显然已经势在必行。
l 标准化
1997 年,JavaScript 1.1 作为一个草案提交给欧洲计算机制造商协会(ECMA)。第 39 技术委员会(TC39)被委派来“标准化一个通用、跨平台、中立于厂商的脚本语言的语法和语义”(http://www.ecma-international.org/memento/TC39.htm)。由来自 Netscape、Sun、微软、Borland 和其他一些对脚本编程感兴趣的公司的程序员组成的 TC39 锤炼出了 ECMA-262,该标准定义了名为 ECMAScript 的全新脚本语言。
在接下来的几年里,国际标准化组织及国际电工委员会(ISO/IEC)也采纳 ECMAScript 作为标准(ISO/IEC-16262)。从此,Web 浏览器就开始努力(虽然有着不同的程度的成功和失败)将 ECMAScript 作为 JavaScript 实现的基础。
3. JavaScript的现状。
JavaScript已经发展到现在的框架及类库等等方面,已经具备非常强大的功能,其子集也已经很完善了。
l JavaScript 现状 —— “方言”
随着 JavaScript 的成熟,开发者基于 JavaScript 创建了许多其他语言,或者叫“方言”。
其中,2023年04月度的最大赢家则为 TypeScript。此外,背后有着 Facebook 支持的Reason 也值得关注,其用有较高的的满意度和兴趣值,仅次于 TypeScript。
l JavaScript 现状 —— 前端框架
在排名方面,React 仍保持最高的满意率连续排名第一,而 Vue 的崛起也并没有停下,紧随其后排名第二。
Angular 的满意率则不尽如人意,尽管其本身拥有庞大的用户群,但也很难看到它重新登上前端框架的冠亚宝座。
l JavaScript 现状 —— 数据层
Redux 仍是使用最广泛的工具。不过GraphQL 也并非没有冲击的可能,其用户持续快速上升,如今已达到了 38.7%。同时,Apollo 的用户数也在持续上涨,已从 2023年04月03日的 11.1% 增加到了 24.9%。
l JavaScript 现状 —— 后端框架(服务端)
JavaScript 在后端(服务端)领域近年来似乎没有取得任何重大突破,虽然每年都有无数的框架出现,但很少有能够获得很大的成功并挑战 Express 的地位的。
2023年04月03日,Express 的地位仍没有被撼动。拥有 Express 继任者称号的 Koa 其表现仍不尽如人意。
而 Next.js 则仍吸引着很多人的兴趣,表现良好,其用户数已从 2018 年的 8.6% 上升到了 24.7%。
l JavaScript 现状 —— 测试
Jest 一路崛起,超越曾经最常用的单元测试框架 Mocha,以 61.2% 的使用率成功占据榜首。
Storybook 也表现喜人,由 2018 年的 15.4% 成功上升至 32.2%,位列第三顺位。
l JavaScript 现状 —— 移动和桌面
React Native 和 Electron 仍是使用 Web 技术构建移动和桌面应用的两个主要解决方案。
4. JavaScript的安装。
若是在html中运行则不需要安装,只需要一个文档编辑器(比如记事本)以及一个网页浏览器,就可以实现JavaScript代码的运行了;若是直接运行JavaScript程序,则需要下载安装“node.js”环境,此时运行JS程序不需要html的协助,而可以直接运行。
js 文件不需要安装
js 文件是需要引用到html文件中的链接,在打开html的时候会编译执行
创建js文件:可以通过创建一个txt后缀的文件,然后将txt更改为js即可。
js文件:通用的器都可以对js文件进行,比如:记事本、notepad、sublime 、webstorm 、ultraeditor 等等。
js 是什么? JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型
5. JavaScript的运行。
JavaScript是一种属于网络的高级脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。通常JavaScript脚本是通过嵌入在HTML中来实现自身的功能的。
l 是一种解释性脚本语言(代码不进行预编译)。
l 主要用来向HTML(标准通用标记语言下的一个应用)页面添加交互行为。
l 可以直接嵌入HTML页面,但写成单独的js文件有利于结构和行为的分离。
l 跨平台特性,在绝大多数浏览器的支持下,可以在多种平台下运行(如Windows、Linux、Mac、Android、iOS等)。
l JavaScript脚本语言同其他语言一样,有它自身的基本数据类型,表达式和算术运算符及程序的基本程序框架。JavaScript提供了四种基本的数据类型和两种特殊数据类型用来处理数据和文字。而变量提供存放信息的地方,表达式则可以完成较复杂的信息处理。
怎样让javascript在网页中运行
l 浏览器控制台运行
JavaScript不同于java语言或者c语言,需要环境、需要编译再运行,js在被制造出来时,就是为浏览器而生,可以直接在浏览器里运行,这里以谷歌浏览器为例,鼠标右键检查或者快捷键F12即可看到控制台可以理解为操作系统里的命令行模式。
在这里就可以直接输入我们想输入的js代码,回车即可查看代码执行结果。
在浏览器输入js代码的好处显而易见:方便,打开浏览器就能输代码查看执行结果,我平常也多用浏览器控制台学学原生js的原理或者看看正则是不是匹配,因为浏览器控制台的缺点太多了:操作不便,没法文件操作只能命令行,找错困难,大多数时候的js是有依赖的,控制台不方便整依赖,所以,一般控制台也就执行执行简单原生的js。
l 写在HTML里运行
实际上,我们肯定不想用命令行的方式,当然是用一个顺手的IDE写代码。
这种方式,就是我大学时候,老师们教的传统方式了。
学HTML的时候,会教到标签,有一个标签不同于别的花里胡哨的标签,这个标签很牛,叫做《script》脚本标签,用来嵌入或者引用可执行脚本,这里解释一下嵌入和引用。嵌入呢,就是把脚本写在标签里边儿,引用呢,就是把脚本写好,然后用标签引入这个脚本的路径。
这是主流的写法也是主流的教法,嵌入的写法就是这样:
引用的写法是这样:
查看执行结果的话,点击IDE边上的浏览器图标或者右键run这个html页面,等浏览器弹出来,右键检查就能看到控制台输出的值了。
实际上上面第二种方法已经很靠谱很普及了,可还是用起来不舒服,每回都要写一个HTML,有的甚至还要再写一个js,那能不能像运行html一样,直接右键运行js呢?
当然是可以的!用node!
Node.js不是一种独立的语言,也不是一个JavaScript的框架,Node.js只是一个让JavaScript运行在浏览器之外的平台。它采用事件驱动、异步编程、为网络服务而设计,实现了诸如文件系统、模块、包、操作系统 API、网络通信等 Core JavaScript 没有或者不完善的功能。
Node能做什么?
● 具有复杂逻辑的网站
● 基于社交网络的大规模web应用
● web Socket网站
● TCP\UDP套接字应用程序
● 命令行工具
● 交互式终端程序
● 带有图形用户界面的本地应用程序
● 单元测试工具
● 客户端Javascript编译器
Node的特点:采用异步式I\O与事件驱动
![]() |
Austin Liu 刘恒辉
Project Manager and Software Designer E-Mail:lzhdim@163.com Blog:https://lzhdim.cnblogs.com 欢迎收藏和转载此博客中的博文,但是请注明出处,给笔者一个与大家交流的空间。谢谢大家。 |