首页 > 代码库 > Es6学习笔记
Es6学习笔记
1、关于let
-- let变量必须先声明,后使用
-- 在同一作用域,let不能重复声明
-- let增加了块级作用域,从而从某种意义上取消了自我执行函数
2、关于const
-- const只声明一个常量,一旦声明,就不能改变(本质是引用地址不能改变)
-- const变量必须先声明,后使用
3、变量结构赋值
-- 解构赋值允许指定默认值,经常在函数传参时使用(只要模式匹配,部分参数可用省略)
-- 交换变量的值
-- 解构赋值对提取JSON对象中的数据,尤其有用
-- 遍历Map结构结合for……of……
4、关于Array.from
-- 方便将类似数组对象和可遍历的对象(iterable)(如documenet.getElementsByAagNames获得的对象)转换成数组
5、关于Array.of
-- 方便将一组值转换成数组,基本上可以用来替代Array()
或new Array()
6、关于数组实例的copyWithin
-- 数组实例的copyWithin
方法,在当前数组内部,将指定位置的成员复制到其他位置(会覆盖原有成员),然后返回当前数组。
7、关于find()和findIndex()
--find():数组实例的find
方法,用于找出第一个符合条件的数组成员。
--findIndex():返回第一个符合条件的数组成员index位置
8、数组的fill(),entries(),keys(),values()
-- fill():fill
方法使用给定值,填充一个数组。fill
方法用于空数组的初始化非常方便.
-- entries()
,keys()
和values()
——用于遍历数组。keys()
是对键名的遍历、values()
是对键值的遍历,entries()
是对键值对的遍历。
9、数组的includes()
-- 返回一个布尔值,表示某个数组是否包含给定的值,取代之前的indexOf()方法,更加直观。
-- Map和Set数据结构有一个has
方法,需要注意与includes
区分。Map结构的has
方法,是用来查找键名的,Set结构的has
方法,是用来查找值的。
10、关于数组的空位
-- ES6则是明确将空位转为undefined
。扩展运算符(...
)也会将空位转为undefined
。
11、关于函数的扩展
-- 通常情况下,定义了默认值的参数,应该是函数的尾参数。如果非尾部的参数设置默认值,实际上这个参数是没法省略的。
-- 函数的length属性。函数的length
属性,将返回没有指定默认值的参数个数。
-- 作用域。一旦设置了参数的默认值,函数进行声明初始化时,参数会形成一个单独的作用域(context)。
--可以将参数默认值设为undefined
,表明这个参数是可以省略的。
-- rest参数. rest 参数(形式为“...变量名”),用于获取函数的多余参数,这样就不需要使用arguments
对象了。
--扩展运算符。扩展运算符(spread)是三个点(...
)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列。由于扩展运算符可以展开数组,所以不再需要apply
方法,将数组转为函数的参数了。
*扩展运算符的运用
(1)合并数组。[...arr1, ...arr2, ...arr3].
(2)扩展运算符可以与解构赋值结合起来,用于生成数组。
(3)如果将扩展运算符用于数组赋值,只能放在参数的最后一位,否则会报错。
a = list[0], rest = list.slice(1) // ES5 [a, ...rest] = list // ES6
(4)扩展运算符还可以将字符串和Iterator接口的对象转为真正的数组。
[...‘hello‘] //["h", "e", "l", "l", "o"]
-- 箭头函数
(1)函数体内的this
对象,就是定义时所在的对象,而不是使用时所在的对象。
(2)不可以当作构造函数,也就是说,不可以使用new
命令,否则会抛出一个错误。
(3)不可以使用arguments
对象,该对象在函数体内不存在。如果要用,可以用Rest参数代替。
(4)不可以使用yield
命令,因此箭头函数不能用作Generator函数。
(5)箭头函数可以绑定this
对象,大大减少了显式绑定this
对象的写法,双冒号
-- 尾调用优化(待学习)
12、关于对象的扩展
-- ES6 允许直接写入变量和函数,作为对象的属性和方法。这时,属性名为变量名。
-- ES6 可用表达式作为属性名。obj[‘a‘ + ‘bc‘] = 123; 等同于 obj[abc]=123;
-- Object.is()。Object.is
就是部署这个算法的新方法。它用来比较两个值是否严格相等,与严格比较运算符(===)的行为基本一致。不同之处只有两个:一是+0
不等于-0
,二是NaN
等于自身。
-- Object.assign()。Object.assign
方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)。如果具有相同属性,则会覆盖原属性。Object.assign
方法实行的是浅拷贝,而不是深拷贝。也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用。
-- 属性的可枚举性。(见文档)
-- 属性的遍历(见文档)
-- 对象的扩展运算符。扩展运算符(...
)用于取出参数对象的所有可遍历属性,拷贝到当前对象之中。这等同于使用Object.assign
方法。
Es6学习笔记