ES6重点——关键字,箭头函数,函数参数,迭代器

ES6

    • let关键字
        • 变量提升
    • const关键字
    • 变量和对象的解构赋值
    • 模板字符串
    • 箭头函数
        • arguments
        • filter
    • 函数参数的默认值
        • rest参数
        • Rest参数和arguments对象的区别
    • 迭代器

let关键字

  1. 不能同时声明同一变量,不可以重复声明
  2. 属于块级作用域(局部变量)
  3. 不存在变量提升

必须先声明该变量后面才能使用

变量提升

在变量创建之前使用,var存在

  1. 不影响作用域链

作用域链:就是代码块内有代码块,上级代码块中 的局部变量下级可用

{ let p = "大哥"; 
	function fn(){ 
		console.log(p); // 这里是可以使用的 
  }
  		fn();
} 

以后声明变量使用 let 就对了

const关键字

  1. 声明必须赋初始值
  2. 不允许重复声明
  3. 值不允许修改
  4. 块级作用域(局部变量)

应用

声明对象类型使用 const,非对象类型声明选择 let;


变量和对象的解构赋值

解构赋值:

ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构赋值

应用

频繁使用对象方法、数组元素,就可以使用解构赋值形式;


模板字符串

模板字符串(template string)是增强版的字符串,用反引号(`)标识,特点:

字符串中可以出现换行符;

可以使用 ${xxx} 形式引用变量;

// 声明字符串的方法:单引号('')、双引号("")、反引号(``) 
// 声明 let string = `我也一个字符串哦!`; 
console.log(string); 
// 1、字符串中可以出现换行符 
let str =
    `
`
; console.log(str); // 2、可以使用 ${xxx} 形式引用变量 let s = "大哥"; let out = `${s}是我最大的榜样!`;

箭头函数

箭头函数多用于匿名函数的定义

注意

  • 如果形参只有一个,则小括号可以省略

  • 函数体如果只有一条语句,则花括号可以省略,函数的返回值为该条语句的执行结果

  • 箭头函数 this 指向声明时所在作用域下 this 的值

  • 箭头函数不能作为构造函数实例化

  • 不能使用 arguments

特性:

  1. 箭头函数的this是静态的,始终指向函数声明时所在作用域下的this的值

  2. 不能作为构造实例化对象

  3. 不能使用 arguments 变量

arguments

arguments的东西也是个对象,而且是一个特殊的对象,

它的属性名是按照传入参数的序列来的,

第1个参数的属性名是’0’,第2个参数的属性名是’1’,以此类推,

并且它还有length属性,

存储的是当前传入函数参数的个数,很多时候我们把这种对象叫做类数组对象。

利用arguments实现方法的重载

利用 arguments.callee 实现递归

filter

用于把Array的某些元素过滤掉,然后返回剩下的元素。

和map()类似,Array的filter()也接收一个函数。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是true还是false决定保留还是丢弃该元素。

var newArray = arr.filter(arg_function[, this_arg])

函数参数的默认值

ES允许给函数的参数赋初始值;

rest参数

ES6 引入rest参数,用于获取函数的实参,用来代替arguments;

Rest参数和arguments对象的区别

  • rest参数只包括那些没有给出名称的参数,arguments包含所有参数

  • arguments 对象不是真正的数组,而rest 参数是数组实例,可以直接应用sort, map, forEach, pop等方法

  • arguments 对象拥有一些自己额外的功能


迭代器

遍历器(Iterator)就是一种机制。它是一种接口,为各种不同的数据结构提供统一的访问机制。任何数 据结构只要部署 Iterator 接口,就可以完成遍历操作

ES6 创造了一种新的遍历命令 for…of 循环,
Iterator 接口主要供 for…of 消费;

原生具备 iterator 接口的数据(可用 for of 遍历):

Array;

Arguments;

Set;

Map;

String;

TypedArray;

NodeList;

原理:

  1. 创建一个指针对象,指向当前数据结构的起始位置;

  2. 第一次调用对象的 next 方法,指针自动指向数据结构的第一个成员;

  3. 接下来不断调用 next 方法,指针一直往后移动,直到指向最后一个成员;

  4. 每调用 next 方法返回一个包含 value 和 done 属性的对象;

注:需要自定义遍历数据的时候,要想到迭代器;

// 声明一个数组 
const xiyou = ['唐僧', '孙悟空', '猪八戒', '沙僧']; 

// 使用 for...of 遍历数组 for(let v of xiyou){
console.log(v);
}
let iterator = xiyou[Symbol.iterator](); 
// 调用对象的next方法 
console.log(iterator.next());

// 重新初始化对象,指针也会重新回到最前面 
let iterator1 = xiyou[Symbol.iterator](); 
console.log(iterator1.next());

你可能感兴趣的:(JS,es6,javascript)