ES6学习记录

一、let 和 const 命令

let

1、let用来声明变量,只在自己的代码块中生效

2、let不存在变量提升

3、暂时性死区:如果区块中存在letconst命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错

4、不允许重复声明

5、存在块级作用域(原因:循环中的变量成了全局变量)

6、块级作用域中能声明函数,但是类似于let,不能在块级作用域外使用,块级作用域必须有大括号

Const

1、声明一个只读的变量,一旦声明立即初始化,不能留到后边赋值

2、只在声明的块级作用域中生效

3、同样存在暂时性死区

4、不能重复声明

5、存在块级作用域

6、简单数据类型来说是值不能改变,但是对于复杂数据类型来说是指针指向的内存地址不能改变,但是复杂数据类型的值是可变的

Es6六种声明变量的方法

let  const   function  import  class  var

顶级对象的属性及全局变量

var命令和function命令声明的全局变量,依旧是顶层对象的属性;另一方面规定,let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性。也就是说,从 ES6 开始,全局变量将逐步与顶层对象的属性脱钩

 

 

二、变量的解构赋值

从数组和对象中提取值,对变量进行赋值,这被称为解构

1数组的解构赋值

(1) 可以从数组中提取值,按照对应位置,对变量赋值

(2) 如果解构不成功,变量的值就等于undefined

(3) 等号左边的模式,只匹配一部分的等号右边的数组。这种情况下,解构依然可以

(4) 解构赋值允许指定默认值

 

2对象的解构赋值

(1) 对象的属性没有次序,变量必须与属性同名,才能取到正确的值

(2) 对象的解构也可以指定默认值

3、字符串的解构赋值

(1) 字符串也可以解构赋值。这是因为此时,字符串被转换成了一个类似数组的对象

4、数值和布尔值的解构赋值

(1) 只要等号右边的值不是对象或数组,就先将其转为对象。由于undefinednull无法转为对象,所以对它们进行解构赋值

5、函数参数的解构赋值

(1) 参数中传入数组的话函数中会自动识别数组中的项

(2) 函数参数部分使用对象可以设置默认值

6圆括号问题

7用途

交换变量的值

从函数返回多个值

函数参数的定义:解构赋值可以方便地将一组参数与变量名对应起来。

提取 JSON 数据解构赋值对提取 JSON 对象中的数据,尤其有用。

函数参数的默认值

遍历 Map 结构

输入模块的指定方法

三、字符串的扩展

ES6 加强了对 Unicode 的支持,允许采用\uxxxx形式表示一个字符,其中xxxx表示字符的 Unicode 码点

ES6 为字符串添加了遍历器接口(详见《Iterator》一章),使得字符串可以被for...of循环遍历

模板字符串:反引号标识,可以单行也可以多行,或者在字符串中嵌入变量,模板字符串中如果使用反引号要进行转义,空格和换行会被保留,如果想去除换行的话在模板字符串后边使用trim方法消除它,变量写在${}中,大括号中可以放入任意js表达式,可以进行运算,以及应用对象属性,可以调用函数。大括号中的值不是字符串将默认调用对象的toString方法。大括号中如果是字符串将原样输出。模板字符串能嵌套,

四、字符串的新增方法

String.fromCodePoint()用于从 Unicode 码点返回对应字符,但是这个方法不能识别码点大于0xFFFF的字符

String.raw()该方法返回一个斜杠都被转义(即斜杠前面再加一个斜杠)的字符串,往往用于模板字符串的处理方法

实例方法:codePointAt()

实例方法:normalize()

实例方法:includes(), startsWith(), endsWith()包含参数字符串,以参数字符串开始结尾

实例方法:repeat()返回新的字符串,将指定的字符串重复n次,参数不能为负

实例方法:padStart()padEnd()字符串不够指定长度在开头(结尾)以指定字符串不全

实例方法:trimStart()trimEnd()消除头部(尾部)的空格,不会改变原字符串

实例方法:matchAll()返回一个正则表达式在当前字符串的所有匹配

五、正则的扩展

 

六、数值的扩展

1二进制和八进制表示法:二进制和八进制数值的新的写法,分别用前缀0b(或0B)和0o(或0O)表示,如果要将0b0o前缀的字符串数值转为十进制,要使用Number方法

2Number.isFinite()检测是否是有限的,非数值的返回false,  Number.isNaN()用来检查一个值是否为NaNNumber.isFinite()对于非数值一律返回false, Number.isNaN()只有对于NaN才返回true,非NaN一律返回false

3Number.parseInt(), Number.parseFloat() 将全局方法parseInt()parseFloat(),移植到Number对象上面,行为完全保持不变。

4Number.isInteger()用来判断一个数值是否为整数

5Number.EPSILONES6 Number对象上面,新增一个极小的常量Number.EPSILON。根据规格,它表示 1 与大于 1 的最小浮点数之间的差。

6Math.trunc方法用于去除一个数的小数部分,返回整数部分

7Math.sign方法用来判断一个数到底是正数、负数、还是零。对于非数值,会先将其转换为数值。

8Math.sign方法用来判断一个数到底是正数、负数、还是零。对于非数值,会先将其转换为数值。

9Math.clz32()方法将参数转为 32 位无符号整数的形式,然后这个 32 位值里面有多少个前导 0

10Math.imul方法返回两个数以 32 位带符号整数形式相乘的结果,返回的也是一个 32 位的带符号整数

11Math.fround方法返回一个数的32位单精度浮点数形式

12Math.hypot方法返回所有参数的平方和的平方根

13Math.expm1(x)返回 ex - 1

14Math.log1p()返回1 + x的自然对数,即Math.log(1 + x)。如果x小于-1,返回NaN

15Math.log10()返回以 10 为底的x的对数。如果x小于 0,则返回 NaN

16Math.log2(x)返回以 2 为底的x的对数。如果x小于 0,则返回 NaN

  • Math.sinh(x) 返回x的双曲正弦(hyperbolic sine
  • Math.cosh(x) 返回x的双曲余弦(hyperbolic cosine
  • Math.tanh(x) 返回x的双曲正切(hyperbolic tangent
  • Math.asinh(x) 返回x的反双曲正弦(inverse hyperbolic sine
  • Math.acosh(x) 返回x的反双曲余弦(inverse hyperbolic cosine
  • Math.atanh(x) 返回x的反双曲正切(inverse hyperbolic tangent

ES2016 新增了一个指数运算符(**

七、函数的扩展

1、函数参数的默认值、与解构赋值默认值结合使用 (一般是在尾部,不然不能省略)

2、函数的length属性是没有指定默认值的参数的个数

3rest 参数(形式为...变量名),用于获取函数的多余参数,这样就不需要使用arguments对象了

4、函数的name属性,返回该函数的函数名

5、箭头函数

数组的扩展

1、扩展运算符console.log(1, ...[2, 3, 4], 5) // 1 2 3 4 5   [a,b,...c] = [1,2,3,4,5]

① 复制数组

1) 写法一a2 = a1.concat()const a1 = [1, 2];

2) 写法二const a2 = [...a1];

3) 写法三const [...a2] = a1;

② 合并数组  [...arr1, ...arr2, ...arr3]

③ 与解构赋值结合[a, ...rest] = list,只能放在参数的最后一位

④ 字符串 字符串转数组[...'hello']// [ "h", "e", "l", "l", "o" ]

⑤ 实现了 Iterator 接口的对象能转化成数组,没有遍历器的不能转化成数组

⑥ Map Set 结构,Generator 函数

 

 

2、Array.from方法用于将两类对象转为真正的数组(dom对象)

3、Array.of()将一组值装换成数组(弥补Array()只有一个参数的缺陷)

4、数组实例的copyWithin方法,在当前数组内部,将指定位置的成员复制到其他位置

5、数组实例的find方法,用于找出第一个符合条件的数组成员。它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为true的成员,然后返回该成员。如果没有符合条件的成员,则返回undefinedfindindex方法返回的是对应的索引,如果都不符合返回-1(类似于indexof,但是indexof不能发现NaN)(indexOf使用的是严格的===所以没法判断NaN

6、fill方法使用给定值,填充一个数组,数组中已有的元素,会被全部抹去。fill方法还可以接受第二个和第三个参数,用于指定填充的起始位置和结束位置。(不是深拷贝对象)

7、entries()keys()values()——用于遍历数组:keys()是对键名的遍历、values()是对键值的遍历,entries()是对键值对的遍历。

8、Includes()用来判断数组中是否含有某个值,返回布尔值。第二个参数是起始值,默认为0,负数为倒数,大于数组长度重置为0

9、Flat()拉平数组,flat()默认只会“拉平”一层,如果想要“拉平”多层的嵌套数组,可以将flat()方法的参数写成一个整数,表示想要拉平的层数,默认为1

10、flatMap()方法对原数组的每个成员执行一个函数(相当于执行Array.prototype.map()),然后对返回值组成的数组执行flat()方法。该方法返回一个新数组,不改变原数组。// 相当于 [[2, 4], [3, 6], [4, 8]].flat() [2, 3, 4].flatMap((x) => [x, x * 2]) // [2, 4, 3, 6, 4, 8]

11、数组的空位,js对数组的空位的处理很不一致,所以要避免使用空位

对象的扩展

 

对象的新增方法

 

Symbol

Symbol是第七种数据类型,表示独一无二的值,Symbol 值通过Symbol函数生成。这就是说,对象的属性名现在可以有两种类型,一种是原来就有的字符串,另一种就是新增的 Symbol 类型。凡是属性名属于 Symbol 类型,就都是独一无二的,可以保证不会与其他属性名产生冲突

Set 和 Map 数据结构

Set

ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。可以用来去重。

  • add(value):添加某个值,返回 Set 结构本身。
  • delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
  • has(value):返回一个布尔值,表示该值是否为Set的成员。
  • clear():清除所有成员,没有返回值。
Map

ES6 提供了 Map 数据结构。它类似于对象,也是键值对的集合,但是的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object 结构提供了字符串的对应,Map 结构提供了的对应

posted @ 2019-06-16 18:09  下一页2013  阅读(165)  评论(0编辑  收藏  举报