作者:阮一峰 页数:796 出版社:empty |
本教程全面介绍JavaScript核心语法, 从最简单的开始讲起, 循序渐进、由浅入深,力求清晰易懂。所有章节都带有大量的代码实例,便于理解和模仿, 可以用到实际项目中, 即学即用。本教程适合初学者当作Java Sc...
前言
我写这本教程,主要原因是自己需要。编程时, 往往需要查阅资料, 确定准确用法。理想的JavaScript参考书, 应该简明易懂, 一目了然,告诉我有哪些注意点,提供代码范例。如果涉及重要概念,还应该适当讲解。可是大多数时候,现实都不是如此。找到的资料冗长难懂,抓不住重点,有时还很陈旧,跟不上语言标准和浏览器的快速发展,且大多数是英文资料学习过程中, 我做了很多JavaScript笔记。多年累积, 数量相当庞大。遇到问题, 我首先查自己的笔记,如果笔记里没有,再到网上查,最后回过头把笔记补全。终于有一天,我意识到可以把笔记做成书,这就是这本书的由来。正因为脱胎于笔记, 这本教程跟其他JavaScript书籍有所不同。作为教程, 本书对所有重要概念都进行了讲解,努力把复杂的问题讲得简单,希望一两分钟内就能抓住重点。本书还可以作为参考手册,罗列了主要用法和各种API接口, 并给出可以立即运行的代码。所有章节按照语言的API编排, 方便以后的查间。如果你发现某处出现陌生的新概念,请不要担心,可以继续阅读下去。以后查阅这些章节的时候,你会发现很方便找到某个知识点相关的所有内容。本文档使用书栈网·BookStack.CN构建入门篇·导论·历史·基本语法
导论
什么是JavaScript语言?Evalua ion Warning:The document was created with Spire.PDF for NET.JavaScript是一种轻量级的脚本语言。所谓“脚本语言”(script language) , 指的是它不具备开发操作系统的能力,而是只用来编写控制其他大型应用程序(比如浏览器)的“脚本”。JavaScript也是一种嵌入式(embedded) 语言。它本身提供的核心语法不算很多, 只能用来做一些数学和逻辑运算。JavaScript本身不提供任何与I/O(输入/输出) 相关的API, 都要靠宿主环境(host) 提供, 所以JavaScript只合适嵌入更大型的应用程序环境, 去调用宿主环境提供的底层API。目前, 已经嵌入JavaScript的宿主环境有多种, 最常见的环境就是浏览器, 另外还有服务器环境,也就是Node项目。从语法角度看, JavaScript语言是一种“对象模型 语言。各种宿主环境通过这个模型, 描述自己的功能和操作接口, 从而通过JavaScript控制这些功能。但是, JavaScript并不是纯粹的“面向对象语言 , 还支持其他编程范式(比如函数式编程) 。这导致几乎任何一个问题, JavaScript都有多种解决方法。阅读本书的过程中, 你会诧异于JavaScript语法的灵活性JavaScript的核心语法部分相当精简, 只包括两个部分:基本的语法构造(比如操作符、控制结构、语句) 和标准库(就是一系列具有各种功能的对象比如Array、Date、Math等) 。除此之外, 各种宿主环境提供外的API(即只能在该环境使用的接口) , 以便JavaScript调用。以浏览器为例, 它提供的额外API可以分成三大类。·浏览器控制类;操作浏览器·DOM类:操作网页的各种元素·Web类:实现互联网的各种功能如果宿主环境是服务器, 则会提供各种操作系统的API, 比如文件操作API、网络通信API等等。这些你都可以在Node环境中找到。本书主要介绍JavaScript核心语法和浏览器网页开发的基本知识, 不涉及Node。全书可以分成以下四大部分。·基本语法·标准库·浏览器API·DOMJavaScript语言有多个版本。本书的内容主要基于ECMAScript 5.1版本, 这是学习本文档使用书栈网·Book e Stack.CN构建JavaScript语法的基础。ES 6和更新的语法请参考我写的《ECMAScript 6入门》.为什么学习JavaScript?JavaScript语言有一些显著特点, 使得它非常值得学习。它既适合作为学习编程的入门语言, 也适合当作日常开发的工作语言。它是目前最有希望、前途最光明的计算机语言之一。操控浏览器的能力JavaScript的发明目的, 就是作为浏览器的内置脚本语言, 为网页开发者提供操控浏览器的能力它是目前唯一一种通用的浏览器脚本语言,所有浏览器都支持。它可以让网页呈现各种特殊效果,为用户提供良好的互动体验。目前, 全世界几乎所有网页都使用JavaScript。如果不用, 网站的易用性和使用效率将大打折扣,无法成为操作便利、对用户友好的网站。对于一个互联网开发者来说,如果你想提供漂亮的网页、令用户满意的上网体验、各种基于浏览器的便捷功能、前后端之间紧密高效的联系, JavaScript是必不可少的工具。广泛的使用领域近年来, JavaScript的使用范围, 慢慢超越了浏览器, 正在向通用的系统语言发展(1)浏览器的平台化随着HTML 5的出现, 浏览器本身的功能越来越强, 不再仅仅能浏览网页, 而是越来越像一个平台,JavaScript因此得以调用许多系统功能, 比如操作本地文件、操作图片、调用摄像头和麦克风等等。这使得JavaScript可以完成许多以前无法想象的事情。(2) NodeNode项目使得JavaScript可以用于开发服务器端的大型项目, 网站的前后端都用JavaScript开发已经成为了现实, 有些嵌入式平台(Raspberry Pi) 能够安装Node, 于是JavaScript就能为这些平台开发应用程序。(3)数据库操作JavaScript甚至也可以用来操作数据库。No SQL数据库这个概念, 本身就是在JSON(JavaScript Object Notation) 格式的基础上诞生的, 大部分No SQL数据库允许JavaScript直接操作。基于SQL语言的开源数据库PostgresQl支持JavaScript作为操作语言, 可以部分取代SQL查询语言。(4)移动平台开发JavaScript也正在成为手机应用的开发语言。一般来说, 安卓平台使用Java语言开发, ios平台使用Objective-C或Swift语言开发。许多人正在努力, 让Javascript成为各个平台的通用开发语言。Phone Gap项目就是将JavaScript和HTML 5打包在一个容器之中, 使得它能同时在i0S和安卓上运行。Facebook公司的React Native项目则是将JavaScript写的组件, 编译成原生组件,从而使它们具备优秀的性能。Mozilla基金会的手机操作系统Firefox OS, 更是直接将JavaScript作为操作系统的平台语言,但是很可惜这个项目没有成功。(5)内嵌脚本语言越来越多的应用程序, 将JavaScript作为内嵌的脚本语言, 比如Adobe公司的著名PDF阅读器Acrobat、Linux桌面环境GNOME 3。(6)跨平台的桌面应用程序Chromium os、windows 8等操作系统直接支持JavaScript编写应用程序。Mozilla的Open WebApps项目、Google的Chrome App项目、Git Hub的Electron项目、以及Tide SDK项目, 都可以用来编写运行于Windows、MacoS和Android等多个桌面平台的程序,不依赖浏览器。(7)小结可以预期, Javascript最终将能让你只用一种语言, 就开发出适应不同平台(包括桌面端、服务器端、手机端) 的程序。早在2013年9月的统计之中, JavaScript就是当年Git Hub上使用量排名第一的语言。著名程序员Jeff Atwood甚至提出了一条“Atwood定律 :“所有可以用JavaScript编写的程序, 最终都会出现Javascript的版本。 (Any application thatcan be written in JavaScript will eventually be written in JavaScript.)易学性相比学习其他语言, 学习JavaScript有一些有利条件。(1)学习环境无处不在只要有浏览器, 就能运行JavaScript程序; 只要有文本编辑器, 就能编写JavaScript程序。这意味着, 几乎所有电脑都原生提供JavaScript学习环境, 不用另行安装复杂的IDE(集成开发环境)和编译器。(2)简单性本文档使用书栈网·Book e Stack.CN构建相比其他脚本语言(比如Python或Ruby) , JavaScript的语法相对简单一些, 本身的语法特性并不是特别多。而且,那些语法中的复杂部分,也不是必需要学会。你完全可以只用简单命令,完成大部分的操作。(3)与主流语言的相似性JavaScript的语法很类似c/C++和Java, 如果学过这些语言(事实上大多数学校都教) ,JavaScript的入门会非常容易。必须说明的是, 虽然核心语法不难, 但是JavaScript的复杂性体现在另外两个方面。首先, 它涉及大量的外部API。JavaScript要发挥作用, 必须与其他组件配合, 这些外部组件五花八门,数量极其庞大,几乎涉及网络应用的各个方面,掌握它们绝非易事。其次, JavaScript语言有一些设计缺陷。某些地方相当不合理, 另一些地方则会出现怪异的运行结果。学习JavaScript, 很大一部分时间是用来搞清楚哪些地方有陷阱。Douglas Crockford写过一本有名的书,名字就叫《JavaScript:TheGoodParts》,言下之意就是这门语言不好的地方很多, 必须写一本书才能讲清楚。另外一些程序员则感到, 为了更合理地编写JavaScript程序, 就不能用JavaScript来写, 而必须发明新的语言, 比如Coffee Script、TypeScript、Dart这些新语言的发明目的,多多少少都有这个因素。尽管如此, 目前看来, JavaScript的地位还是无法动摇。加之, 语言标准的快速进化, 使得JavaScript功能日益增强, 而语法缺陷和怪异之处得到了弥补。所以, JavaScript还是值得学习,况且它的入门真的不难。强大的性能JavaScript的性能优势体现在以下方面。(1)灵活的语法,表达力强。JavaScript既支持类似C语言清晰的过程式编程, 也支持灵活的函数式编程, 可以用来写并发处理(concurrent) , 这些语法特性已经被证明非常强大, 可以用于许多场合, 尤其适用异步编程。JavaScript的所有值都是对象, 这为程序员提供了灵活性和便利性。因为你可以很方便地、按照需要随时创造数据结构,不用进行麻烦的预定义JavaScript的标准还在快速进化中, 并不断合理化, 添加更适用的语法特性。(2)支持编译运行。JavaScript语言本身, 虽然是一种解释型语言, 但是在现代浏览器中, JavaScript都是编译后运行。程序会被高度优化, 运行效率接近二进制程序。而且, JavaScript引擎正在快速发展, 性能将越来越好。
此外, 还有一种Web Assembly格式, 它是JavaScript引擎的中间码格式, 全部都是二进制代码。由于跳过了编译步骤,可以达到接近原生二进制代码的运行速度。各种语言(主要是C和C++)通过编译成Web Assembly, 就可以在浏览器里面运行。(3)事件驱动和非阻塞式设计。JavaScript程序可以采用事件驱动(event-driven) 和非阻塞式(non-blocking) 设计, 在服务器端适合高并发环境,普通的硬件就可以承受很大的访问量,开放性JavaScript是一种开放的语言。它的标准ECMA-262是ISO国际标准, 写得非常详尽明确:该标准的主要实现(比如V 8和SpiderMonkey引擎) 都是开放的, 而且质量很高。这保证了这门语言不属于任何公司或个人,不存在版权和专利的问题。语言标准由TC39委员会负责制定,该委员会的运作是透明的,所有讨论都是开放的,会议记录都会对外公布。不同公司的JavaScript运行环境, 兼容性很好, 程序不做调整或只做很小的调整, 就能在所有浏览器上运行。社区支持和就业机会全世界程序员都在使用JavaScript, 它有着极大的社区、广泛的文献和图书、丰富的代码资源。绝大部分你需要用到的功能,都有多个开源函数库可供选用。作为项目负责人, 你不难招聘到数量众多的JavaScript程序员; 作为开发者, 你也不难找到一份JavaScript的工作。实验环境本教程包含大量的示例代码,只要电脑安装了浏览器,就可以用来实验了。读者可以一边读一边运行示例,加深理解。推荐安装Chrome浏览器, 它的“开发者工具 (Developer Tools) 里面的 控制台 (console) , 就是运行JavaScript代码的理想环境进入Chrome浏览器的 控制台”, 有两种方法。
目录
致谢
介绍
前言
入门篇
数据类型
运算符
语法专题
标准库
导论
历史
基本语法
概述
null, undefined和布尔值
数值
字符串
对象
函数
数组
算术运算符
比较运算符
布尔运算符
二进制位运算符
其他运算符,运算顺序
数据类型的转换
错误处理机制
编程风格
console对象与控制台
Object对象
属性描述对象
Array对象
包装对象
Boolean对象
Number对象
String对象
Math对象
Date对象
RegExp对象
JSON对象
实例对象与new命令
this关键字
对象的继承
Object对象的相关方法
严格模式
概述
定时器
Promise对象
Node接口
面向对象编程
异步操作
DOM
概述
事件
浏览器模型
附录:网页元素接口
NodeList接口, HTML Collection接口
ParentNode接口, Child Node接口
Document节点
Element节点
属性的操作
Text节点和DocumentFragment节点
CSS操作
Mutation Observer API
Event Target接口
事件模型
Event对象
鼠标事件
键盘事件
进度事件
表单事件
触摸事件
拖拉事件
其他常见事件
Global Event Handlers接口
浏览器模型概述
window对象
Navigator对象, Scr cen对象
Cookie
XMLHttpRequest对象
同源限制
概述
概述
基本概念
操作流程
indexed DB对象
IDB Request对象
IDB Database对象
IDB ObjectStore对象
IDB Transaction对象
IDB Index对象
IDB Cursor对象
IDB Key Range对象
参考链接
window对象的属性
window对象的方法
事件
多窗口操作
简介
XMLHttpRequest的实例属性
XML Hup Request的实例方法
XMI.Hup Request实例的事件
Navigator 5end Beacon()
CORS通信
Storage接口
History对象
Location对象, URL对象, URL Search Params对象
Array Buffer对象, Blob对象
File对象, FileList对象, FileReader对象
表单, For Data对象
Indexed DB API
Web Worker