JavaScript

ES6 介绍

2022-04-08  本文已影响0人  小小前端搬运工

1. ES6 简介

1.1 什么是 ES6 ?

ES 的全称是 ECMAScript , 它是由 ECMA 国际标准化组织,制定的一项脚本语言的标准化规范。

年份 版本
2015年6月 ES2015
2016年6月 ES2016
2017年6月 ES2017
2018年6月 ES2018

ES6 实际上是一个泛指,泛指 ES2015 及后续的版本。

1.2为什么使用 ES6 ?

每一次标准的诞生都意味着语言的完善,功能的加强。JavaScript语言本身也有一些令人不满意的地方。

2.ES6 的新增语法

2.1 let

ES6中新增的用于声明变量的关键字

let声明的变量只在所处于的块级有效

 if (true) { 
     let a = 10;
 }
console.log(a) // a is not defined

注意:使用let关键字声明的变量才具有块级作用域,使用var声明的变量不具备块级作用域特性。

不存在变量提升

 console.log(a); // a is not defined 
 let a = 20;

暂时性死区

 var tmp = 123;
 if (true) { 
     tmp = 'abc';
     let tmp; 
 } 

2.2 const

作用:声明常量,常量就是值(内存地址)不能变化的量。

具有块级作用域

 if (true) { 
     const a = 10;
 }
console.log(a) // a is not defined

声明常量时必须赋值

const PI; // Missing initializer in const declaration

常量赋值后,值不能修改。

const PI = 3.14;
PI = 100; // Assignment to constant variable.
 const ary = [100, 200];
 ary[0] = 'a';� ary[1] = 'b';
 console.log(ary); // ['a', 'b']; 
 ary = ['a', 'b']; // Assignment to constant variable.

2.3 letconstvar 的区别

  1. 使用 var 声明的变量,其作用域为该语句所在的函数内,且存在变量提升现象。

  2. 使用 let 声明的变量,其作用域为该语句所在的代码块内,不存在变量提升。

  3. 使用 const 声明的是常量,在后面出现的代码中不能再修改该常量的值。

var let const
函数级作用域 块级作用域 块级作用域
变量提升 不存在变量提升 不存在变量提升
值可更改 值可更改 值不可更改

2.4 解构赋值

ES6中允许从数组中提取值,按照对应位置,对变量赋值。对象也可以实现解构。

2.4.1 数组解构

let [a, b, c] = [1, 2, 3];
console.log(a)
console.log(b)
console.log(c)

如果解构不成功,变量的值为undefined。

let [foo] = [];
let [bar, foo] = [1];

按照一定模式,从数组中或对象中提取值,将提取出来的值赋值给另外的变量。

2.4.2 对象解构

let person = { name: 'zhangsan', age: 20 }; 
let { name, age } = person;
console.log(name); // 'zhangsan' 
console.log(age); // 20
let {name: myName, age: myAge} = person; // myName myAge 属于别名
console.log(myName); // 'zhangsan' 
console.log(myAge); // 20

2.5 箭头函数

ES6中新增的定义函数的方式。

() => {} 
const fn = () => {}
function sum(num1, num2) { 
    return num1 + num2; 
 }
const sum = (num1, num2) => num1 + num2;
function fn (v) {
     return v;
} 
const fn = v => v;
 const obj = { name: '张三'} 
 function fn () { 
     console.log(this);
     return () => { 
         console.log(this)
     } 
 } 
 const resFn = fn.call(obj); 
 resFn();

2.6 剩余参数

 function sum (first, ...args) {
     console.log(first); // 10
     console.log(args); // [20, 30] 
 }
 sum(10, 20, 30)
let students = ['wangwu', 'zhangsan', 'lisi'];
 let [s1, ...s2] = students; 
 console.log(s1);  // 'wangwu' 
 console.log(s2);  // ['zhangsan', 'lisi']

3. ES6 的内置对象扩展

3.1 Array 的扩展方法

3.1.1 扩展运算符(展开语法)

 let ary = [1, 2, 3];
 ...ary  // 1, 2, 3
 console.log(...ary);    // 1 2 3
 console.log(1, 2, 3)

// 方法一 
 let ary1 = [1, 2, 3];� let ary2 = [3, 4, 5];
 let ary3 = [...ary1, ...ary2];
 // 方法二 
 ary1.push(...ary2);

let oDivs = document.getElementsByTagName('div'); 
oDivs = [...oDivs];

3.1.2 构造函数方法:Array.from()

let arrayLike = {
    '0': 'a',
    '1': 'b',
    '2': 'c',
    length: 3
}; 
let arr2 = Array.from(arrayLike); // ['a', 'b', 'c']

let arrayLike = { 
     "0": 1,
     "1": 2,
     "length": 2
}
let newAry = Array.from(aryLike, item => item *2)

3.1.3 实例方法:find()

 let ary = [{
     id: 1,
     name: '张三‘
 }, { 
     id: 2,
     name: '李四‘
 }]; 
 let target = ary.find((item, index) => item.id == 2);

3.1.4 实例方法:findIndex()

let ary = [1, 5, 10, 15];
let index = ary.findIndex((value, index) => value > 9); 
console.log(index); // 2

3.1.5 实例方法:includes()

[1, 2, 3].includes(2) // true 
[1, 2, 3].includes(4) // false

3.2 String 的扩展方法

3.2.1 模板字符串

let name = `zhangsan`;
let name = '张三'; 
let sayHello = `hello,my name is ${name}`; // hello, my name is zhangsan
 let result = { 
     name: 'zhangsan', 
     age: 20, 
     sex: '男' 
 } 
 let html = ` <div>
     <span>${result.name}</span>
     <span>${result.age}</span>
     <span>${result.sex}</span>
 </div> `;
const sayHello = function () { 
    return '哈哈哈哈 追不到我吧 我就是这么强大';
 }; 
let greet = `${sayHello()} 哈哈哈哈`; console.log(greet); // 哈哈哈哈 追不到我吧 我就是这么强大 哈哈哈哈

3.2.2 实例方法:startsWith() 和 endsWith()

startsWith():表示参数字符串是否在原字符串的头部,返回布尔值
endsWith():表示参数字符串是否在原字符串的尾部,返回布尔值

 let str = 'Hello world!';
 str.startsWith('Hello') // true 
 str.endsWith('!')       // true

3.2.3 实例方法:repeat()

repeat方法表示将原字符串重复n次,返回一个新字符串。

'x'.repeat(3)      // "xxx" 
'hello'.repeat(2)  // "hellohello"

3.3 Set 数据结构

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

Set本身是一个构造函数,用来生成 Set 数据结构。

const s = new Set();

Set函数可以接受一个数组作为参数,用来初始化。

const set = new Set([1, 2, 3, 4, 4]);

3.3.1 实例方法

 const s = new Set();
 s.add(1).add(2).add(3); // 向 set 结构中添加值 
 s.delete(2)             // 删除 set 结构中的2值 
 s.has(1)                // 表示 set 结构中是否有1这个值 返回布尔值 
 s.clear()               // 清除 set 结构中的所有值

3.1.2 遍历

Set 结构的实例与数组一样,也拥有forEach方法,用于对每个成员执行某种操作,没有返回值。

s.forEach(value => console.log(value))
上一篇下一篇

猜你喜欢

热点阅读