全局作用域 函数作用域 块级作用域
一:块级作用域
1.外层作用域无法读取内层作用域的变量
2.let const声明的变量只能先声明,后使用。 let const都是块级作用域!
const声明的变量必须赋初始值且不可变,像final! 不可变是指引用不可变,也就是内存中的那片地址。
Object.freeze(要冻结对象) 引用指向的对象不可变哦! const声明引用不可变!
3.es6六种声明变量的方法:var function let const import class
4.模块化编程:封装的思想哦! 作用域
5.顶层对象 全局对象
二:变量的解构赋值
1.数组
赋值的时候,进行模式匹配! 就是按照模式匹配的方式来赋值!(解构)
模式不匹配:解构失败
只要某种数据结构是可遍历的,那么就可以进行解构赋值。
2.对象
解构赋值:模式匹配的时候按照key、value匹配。不同于数组是按照索引。
3.字符串
三:
五:数组扩展
1.Array.from()
方法用于将两类对象转为真正的数组: 类似数组的对象(array-like object)和可遍历(iterable)的对象(包括ES6新增的数据结构Set和Map)。
2.Array.of()
方法用于将一组值,转换为数组。
3.Array.copyWithin() 在当前数组内部,将指定位置的成员复制到其他位置(会覆盖原有成员),然后返回当前数组。也就是说,使用这个方法,会修改当前数组。
4.数组实例的find( function(value,index,arr)) 方法: 和filter很像哦!
数组实例的findIndex()
方法的用法与find
方法非常类似,返回第一个符合条件的数组成员的位置,如果所有成员都不符合条件,则返回-1
。
5.数组实例的fill()方法,使用给定的值填充数组。
6.数组实例的遍历:keys() 键名的遍历
values() 键值得遍历
entries() 键值对的遍历
六:对象的扩展
1.es6变量和方法的简写
2.Object.is() “===”的改进版 一是+0
不等于-0
,二是NaN
等于自身。
3.Object.assign
方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)。
同名属性会覆盖,后面的覆盖前面的。
4.Object.assign
拷贝的属性是有限制的,只拷贝源对象的自身属性(不拷贝继承属性),也不拷贝不可枚举的属性(enumerable: false
)。 ??????
有一些函数库提供Object.assign
的定制版本(比如Lodash的_.defaultsDeep
方法),可以解决浅拷贝的问题,得到深拷贝的合并。
七:Symbol JavaScript的第七种数据类型.
Number String Object Boolean Undefined Null
八:Set和Map数据结构
1.Set不会添加重复的值!
2.WeakSet: 首先,WeakSet 的成员只能是对象,而不能是其他类型的值。
其次,弱引用,引用存在也会被GC机制回收。
3.Map: 本质上是键值对的集合(Hash 结构),但是传统上只能用字符串当作键。这给它的使用带来了很大的限制。
WeakMap: 首先,WeakMap
只接受对象作为键名(null
除外),不接受其他类型的值作为键名。
九:Iterator 和 for...of 循环
1.Javascript表示集合的数据结构: 数组 对象 Map Set
遍历器(Iterator)就是这样一种机制。它是一种接口,为各种不同的数据结构提供统一的访问机制。
十:Promise对象
1.有了Promise对象,就可以将异步操作以同步操作的流程表达出来,避免层层嵌套的回调函数。
2.Promise对象,容器,里面保存着某个未来才会结束的事件的结果。
3.Promise对象代表一个异步操作,三种状态:Pending、Resolved、Rejected。 一个异步操作是一个对象。
异步操作的结果才可以更改状态。
状态一旦改变就会凝固。
4.then()方法:它的作用是为 Promise 实例添加状态改变时的回调函数。前面说过,then
方法的第一个参数是Resolved
状态的回调函数,第二个参数(可选)是Rejected
状态的回调函数。
pending-》resolved pending-》rejected:状态改变执行回调!
5.jQuery的所有Ajax操作函数,默认返回的就是一个deferred对象。
6.Promise.resolve() 有时需要将现有对象转为Promise对象,Promise.resolve
方法就起到这个作用。
十一:Class
1.类的数据类型是函数,且类本身指向构造函数
2.由于类的方法都定义在prototype对象上面
3.表达式就是变量? 就是一个赋值表达式?
4.constructor:类的构造函数,constructor
方法默认返回实例对象(即this
),完全可以指定返回另外一个对象。
十二:Reflect对象
1.Reflect
对象与Proxy
对象一样,也是 ES6 为了操作对象而提供的新 API。
2.函数式行为! 语言的一种完善!
十三:Proxy对象
1.对象的拦截器 访问对象时候的代理。
ES6 知识点总览:
let/const 变量的解构赋值 字符串扩展 正则扩展 数值扩展 函数扩展 数组扩展 对象扩展 Symbol Set和Map数据结构 Promise对象 Class
模块加载方案 Proxy Reflect
发现的问题
1.可遍历解构? Iterator
2.重载和覆盖? 好久没看都忘记了啊!
3.深拷贝和浅拷贝?