ES6标准入门——阮一峰 读书笔记

  • Post author:
  • Post category:其他



Let和const


不存在变量提升

只要块级作用域内存在let命令,它所申明的变量就绑定这个区域,不再受外部影响。凡是在声明之前就使用这些变量就会报错。

Let不允许在相同的作用域内,重复声明一个变量

ES5只有全局作用域和函数作用域,没有块级作用域,这带来很多不合理的场景。一对大括号就是一个块。

ES5规定函数只能在顶层作用域和函数作用域中声明,不能在块级作用域声明。

ES6引入了块级作用域,明确允许在块级作用域中声明函数。并且函数声明的行为类似于let,在块级作用域之外不可引用。但是考虑到环境导致的行为差异太大,应该避免在块级作用域内声明函数,写成函数表达式更好。

Const声明一个只读的常量,一旦声明,常量的值就不能改变。这意味着const一旦声明变量,就必须立即初始化。

也存在暂时性死区,只在声明所在的块级作用域内有效。也不可重复声明

对于复合类型的变量,变量名不指向数据,而是指向数据的地址。Const只是保证变量名指向的地址不变。

ES6一共又6种声明变量的方法:let,const,var,function,import,class

Let和const声明的全局变量不属于全局对象的属性。


变量的解构赋值

事实上,只要某种结构具有Iterator接口,都可以采用数组形式的解构赋值。

解构赋值允许指定默认值。

Var [foo = true] = []; //foo = true

解构不仅可以用于数组,还可以用于对象。数组的元素是按次序排序的,变量的取值由他的位置决定,而对象的属性没有次序,变量必须与属性同名才能取得正确的值。

Let { log, sin, cos } = Math; //将Math对象的对数,正弦,余弦三个方法赋值到对应的变量。

var o ={a: 5};

let {a,b=2,c} = o;

console.log(a)


字符串的解构赋值


Const [a,b,c,d,e] = ‘hello’

Let { length: len} = ‘hello’ //len = 5

解构赋值的规则是只要等号右边的值不是对象,就先将其转为对象。由于undefined和null无法转为对象,所以对它们进行解构赋值,都会报错。


函数参数的解构赋值

变量解构赋值用途很多

1.交换变量的值

[x, y] = [ y, x ]

2.从函数返回多个值

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

4.提取JSON数据

5.函数参数的默认值

6.遍历Map结构:任何部署了Iterator接口的对象,都可以用for…of循环遍历。Map结构原生支持Iterator接口,配合变量的解构赋值,获取键名和键值就非常方便

7.输入模块的指定方法

const { SourceMapConsumer, SourceNode } = require(“source-map”);


字符串的扩展


字符的Unicode表示法

codePointAt()方法:能够正确处理四个字节储存的字符,返回一个字符的码点。

String.fromCodePoint()方法可以识别0xFFFF的字符

为字符串添加了遍历接口,使得字符串可以被for…of循环遍历。

除了遍历字符串,这个遍历器的最大的优点是可以识别大于0xFFFF的码点。

ES5提供charAt方法,返回字符串给定位置的字符

Normalize()

传统上,JavaScript只有indexOf方法,可以用来确定一个字符串是否包含在另一个字符串种,ES6又提供了三种新方法


Includes()


startsWith()

endsWith()

这三个方法都支持第二个参数,表示开始搜索的位置。

Repeat()方法:返回一个新字符串,表示将原字符串重复n次

padStart(),padEnd():ES7提供了字符串补全长度的功能。

模板字符串:增强版的字符串,,用反引号


标识,它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量

模板字符串中嵌入变量,需要将变量名写在${}之中


数组的扩展



版权声明:本文为weixin_44457144原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。