MDN-JavaScript指南

By Erik

introduction

什么是 JavaScript ?

JavaScript 是一门跨平台、面向对象的轻量级脚本语言。 在宿主环境(例如 web 浏览器)中, JavaScript 能够通过其所连接的环境提供的编程接口进行控制。

JavaScript 和 Java 的对比

JavaScript
面向对象。不区分对象类型。通过原型机制继承,任何对象的属性和方法均可以被动态添加。
变量类型不需要提前声明(动态类型)。
不能直接自动写入硬盘。

Java 基于类系统。分为类和实例,通过类层级的定义实现继承。不能动态增加对象或类的属性或方法。
变量类型必须提前声明(静态类型)。
可以直接自动写入硬盘。

语法和类型

基础

指令被称为 语句,并用分号 (;)分隔。空格、制表符和换行符被称为空白字符。JavaScript 脚本的源文本是从左到右扫描,并将其转换成由 tokens(不可分割的词法单位)、控制字符、行终止符、注释或空白符组成的输入元素序列。

注释
1
2
3
4
5
6
7
// 单行注释

/* 这是一个更长的,
多行注释
*/

/* 然而, 你不能, /* 嵌套注释 */ 语法错误 */
声明

var
声明一个变量,可赋一个初始化值。

let
声明一个块作用域的局部变量,可赋一个初始化值。

const
声明一个块作用域的只读的命名常量。

声明变量/变量求值/变量的作用域/变量声明提升/函数提升/全局变量/常量

数据结构和类型
1.六种 原型 数据类型:

Boolean. 布尔值,true 和 false.

null. 一个表明 null 值的特殊关键字。 JavaScript 是大小写敏感的,因此 null 与 Null、NULL或其他变量完全不同。

undefined. 变量未定义时的属性。

Number. 表示数字,例如: 42 或者 3.14159。

String. 表示字符串,例如:”Howdy”

Symbol ( 在 ECMAScript 6 中新添加的类型).。一种数据类型,它的实例是唯一且不可改变的。

2.以及 Object 对象

数据类型的转换

字符串转换为数字:parseInt()和parseFloat()

字面量

字面量是由语法表达式定义的常量;或,通过由一定字词组成的语词表达式定义的常量

在字符串中使用的特殊字符/转义字符

流程控制与错误处理

语句块

条件判断语句

if…else 语句/switch 语句/

异常处理语句

异常类型/throw 语句/try…catch 语句/使用Error对象

Promises

通过 XHR 加载图片

循环和迭代

for 语句
do…while 语句
while 语句
label 语句
break 语句
continue 语句
for…in 语句
for…of statement

函数

定义函数

函数声明/函数表达式

调用函数
函数作用域
作用域和函数堆栈

递归/嵌套函数和闭包/保存变量/多层嵌套函数/命名冲突

闭包

闭包是 JavaScript 中最强大的特性之一。JavaScript 允许函数嵌套,并且内部函数可以访问定义在外部函数中的所有变量和函数,以及外部函数能访问的所有变量和函数。但是,外部函数却不能够访问定义在内部函数中的变量和函数。这给内部函数的变量提供了一定的安全性。此外,由于内部函数可以访问外部函数的作用域,因此当内部函数生存周期大于外部函数时,外部函数中定义的变量和函数将的生存周期比内部函数执行时间长。当内部函数以某一种方式被任何一个外部函数作用域访问时,一个闭包就产生了。

使用 arguments 对象
函数参数

默认参数/剩余参数

箭头函数

箭头功能捕捉闭包上下文的this值

预定义函数

表达式和运算符

运算符

赋值运算符(Assignment operators)

比较运算符(Comparison operators)

算数运算符(Arithmetic operators)

位运算符(Bitwise operators)

逻辑运算符(Logical operators)

字符串运算符(String operators)

条件(三元)运算符(Conditional operator)

逗号运算符(Comma operator)

一元运算符(Unary operators)

关系运算符(Relational operator):

1.in操作符,如果所指定的属性确实存在于所指定的对象中,则会返回true.

2.instanceof 如果所判别的对象确实是所指定的类型,则返回true。

运算符优先级

表达式

数字和日期

数字
数字对象
数字的属性和方法
数学对象(Math)
日期对象

Text formatting

字符串

多行模板字符串

国际化
正则表达式

正则表达式

正则表达式是用于匹配字符串中字符组合的模式。在 JavaScript中,正则表达式也是对象。

索引集合类 (Indexed collections)

数组对象(Array object)
数组推导式
类型化数组(Typed Arrays )

带键的集合

Map 和 Set 对象承载的数据元素可以按照插入时的顺序被迭代遍历。

映射

Map对象/WeakMap对象

集合

Set对象/WeakSet对象

Map的键和Set的值的等值判断

使用对象

JavaScript 的设计是一个简单的基于对象的范式。一个对象就是一系列属性的集合,一个属性包含一个名和一个值。一个属性的值可以是函数,这种情况下属性也被称为方法。

对象和属性
枚举一个对象的所有属性
创建新对象

对象模型的细节

基于类 vs 基于原型的语言

定义类
子类和继承
添加和移除属性
差异总结
属性的继承

迭代器和生成器

for循环到map()和filter()。迭代器和生成器将迭代的概念直接带入核心语言,并提供了一种机制来自定义for…of循环的行为 。

迭代器
生成器
可迭代对象
高级生成器

元编程

代理

Proxy对象可以拦截某些操作并实现自定义行为。 例如获取一个对象上的属性:

句柄和陷阱/撤销 Proxy

反射