introduction
什么是 JavaScript ?
JavaScript 是一门跨平台、面向对象的轻量级脚本语言。 在宿主环境(例如 web 浏览器)中, JavaScript 能够通过其所连接的环境提供的编程接口进行控制。
JavaScript 和 Java 的对比
JavaScript
面向对象。不区分对象类型。通过原型机制继承,任何对象的属性和方法均可以被动态添加。
变量类型不需要提前声明(动态类型)。
不能直接自动写入硬盘。
Java 基于类系统。分为类和实例,通过类层级的定义实现继承。不能动态增加对象或类的属性或方法。
变量类型必须提前声明(静态类型)。
可以直接自动写入硬盘。
语法和类型
基础
指令被称为 语句,并用分号 (;)分隔。空格、制表符和换行符被称为空白字符。JavaScript 脚本的源文本是从左到右扫描,并将其转换成由 tokens(不可分割的词法单位)、控制字符、行终止符、注释或空白符组成的输入元素序列。
注释
1 | // 单行注释 |
声明
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