Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >JavaScript——ES6新增语法特性

JavaScript——ES6新增语法特性

作者头像
岳泽以
发布于 2022-10-26 09:33:17
发布于 2022-10-26 09:33:17
46300
代码可运行
举报
文章被收录于专栏:岳泽以博客岳泽以博客
运行总次数:0
代码可运行

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

年份

版本

2015年6月

ES2015

2016年6月

ES2016

2017年6月

ES2017

2018年6月

ES2018

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

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

  • 变量提升特性增加了程序员运行时的不可预测性
  • 语法过于松散,实现相同的功能,不同的人可能会写出不同的代码

ES6新增语法

let

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

  • let声明的变量只在所处于的块级有效
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 if (true) { 
     let a = 10;
 } console.log(a) // a is not defined

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

  • 不存在变量提升
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
congsole.log(a); //a is not defined
let a = 20; 
  • 暂时性死区
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var a = 123;
if(true){
    a='abc';
    let tmp;
}

经典面试题一:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 var arr = [];
 for (var i = 0; i < 2; i++) {
     arr[i] = function () {
         console.log(i); 
     }
 }
 arr[0]();//2
 arr[1]();//2

经典面试题图解:此题的关键点在于变量i是全局的,函数执行时输出的都是全局作用域下的i值。

经典面试题二:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 let arr = [];
 for (let i = 0; i < 2; i++) {
     arr[i] = function () {
         console.log(i); 
     }
 }
 arr[0]();//0
 arr[1]();//1

经典面试题图解:此题的关键点在于每次循环都会产生一个块级作用域,每个块级作用域中的变量都是不同的,函数执行时输出的是自己上一级(循环产生的块级作用域)作用域下的i值.

const

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

  • 具有块级作用域
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 if (true) { 
     const a = 10;
 }
console.log(a) // a is not defined
  • 声明常量时必须赋值
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const PI; // 报错Missing initializer in const declaration
  • 常量赋值后,值不能修改
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 const PI = 3.14;
 PI = 100; // 报错Assignment to constant variable. 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 const ary = [100, 200];
 ary[0] = 'a';
 ary[1] = 'b';
 console.log(ary); // ['a', 'b']; 
 ary = ['a', 'b']; // Assignment to constant variable.

let、const、var的区别

  1. 使用var声明的变量,其作用域为该语句所在的函数内,且存在变量提升现象。
  2. 使用let声明的变量,其作用域为该语句所在的代码块内,不存在变量提升。
  3. 使用const声明的是常量,在后面出现的代码中不能再修改该常量的值

var

let

const

函数级作用域

块级作用域

块级作用域

变量提升

不存在变量提升

不存在变量提升

值可更改

值可更改

值不可更改

解构赋值

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

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

数组解构
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        let ary = [1, 2, 3];
        let [a, b, c, d, e] = ary;
        console.log(a);//1
        console.log(b);//2
        console.log(c);//3
        console.log(d);//undefined
        console.log(e);//undefined

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

对象解构
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        let person = { name: 'ren', age: 10 }
        let { name, age } = person;
        console.log(name);//ren
        console.log(age);//10
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        let person = { name: 'ren', age: 10 }
        let { name: myName } = person;//myName属于别名
        console.log(myName);//ren

箭头函数

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
() => {} 
const fn = () => {}

函数体中只有一句代码,且代码的执行结果就是返回值,可以省略大括号

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        const sum = (num1, num2) => num1 + num2;
        const result = sum(1, 2);
        console.log(result);//3

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function fn(v) {
    alert(v)
}
//↓↓↓
const fn = v => alert(v)

箭头函数不绑定this关键字,箭头函数中的this,指向的是函数定义位置的上下文this

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        const obj = { name: 'zhangsan' }
        function fn() {
            console.log(this);
            return () => {
                console.log(this);
            }

        }
        fn.call(obj)

        const resFn = fn.call(obj)
        resFn();

剩余参数

剩余参数语法允许我们将一个不定数量的参数表示为一个数组

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        function s(f, ...ar) {
            console.log(f);//10
            console.log(ar);//[20, 30]
        }
        s(10, 20, 30)

剩余参数和解构配合使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 let students = ['wangwu', 'zhangsan', 'lisi'];
 let [s1, ...s2] = students; 
 console.log(s1);  // 'wangwu' 
 console.log(s2);  // ['zhangsan', 'lisi']

ES6的内置对象扩展

Array 的扩展方法

扩展运算符(展开语法)

扩展运算符可以将数组或者对象转为用逗号分隔的参数序列。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 let ary = [1, 2, 3];
 ...ary  // 1, 2, 3
 console.log(...ary);    // 1 2 3
 console.log(1, 2, 3)

扩展运算符可以应用于合并数组。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 方法一 
 let ary1 = [1, 2, 3]; let ary2 = [3, 4, 5];
 let ary3 = [...ary1, ...ary2];
 // 方法二 
 ary1.push(...ary2);

将类数组或可遍历对象转换为真正的数组。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        var oDivs = document.querySelectorAll('div');//oDivs是伪数组
        var a = [...oDivs];//此时a就是一个真正的数组
构造函数方法:Array.from()

方法还可以接受第二个参数,作用类似于数组的map方法,用来对每个元素进行处理,将处理后的值放入返回的数组。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        var arrayLike = {
            '0': '张三',
            '1': '张2',
            '2': '张1',
            "length": 3
        }
        const a = Array.from(arrayLike)
        console.log(a);//返回的数组
实例方法:find()

用于找出第一个符合条件的数组成员,如果没有找到返回undefined

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        var ary = [{
            id: 1,
            name: '张三'
        }, {
            id: 2,
            name: '李四'
        }];
        let target = ary.find(item => item.id == 2)
        console.log(target);
实例方法:findIndex()

用于找出第一个符合条件的数组成员的位置,如果没有找到返回-1

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        var ary = [1, 5, 4, 6, 3];
        let target = ary.findIndex((value, index) => value > 3);//如果没有返回-1
        console.log(target);//1 第一个符合的值是5 5的索引是1
实例方法:includes()

表示某个数组是否包含给定的值,返回布尔值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        let ary = [1, 3, 5, 6, 8]
        var a = ary.includes('a')
        console.log(a);//false
        var b = ary.includes(1)
        console.log(b);//true

String的扩展方法

模板字符串

ES6新增的创建字符串的方式,使用反引号定义。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 let name = `zhangsan`;

模板字符串中可以解析变量。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 let name = '张三'; 
 let sayHello = `hello,my name is ${name}`; // hello, my name is zhangsan

模板字符串中可以换行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 let result = { 
     name: 'zhangsan', 
     age: 20,   
     sex: '男' 
 } 
 let html = ` <div>
     <span>${result.name}</span>
     <span>${result.age}</span>
     <span>${result.sex}</span>
 </div> `;

在模板字符串中可以调用函数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        //模板字符串调用函数
        const fn = () => {
            return '我是fn函数'
        }
        let html1 = `我是模板字符串${fn()}`
        console.log(html1);//我是模板字符串我是fn函数
实例方法:startsWith()和endsWith()
  • startsWith():表示参数字符串是否在原字符串的头部,返回布尔值
  • endsWith():表示参数字符串是否在原字符串的尾部,返回布尔值
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 let str = 'Hello world!';
 str.startsWith('Hello') // true 
 str.endsWith('!')       // true
实例方法:repeat()

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    console.log("y".repeat(6));//yyyyyy

Set数据结构

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const s = new Set();

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const set = new Set([1, 2, 3, 4, 4]);
实例方法
  • add(value):添加某个值,返回 Set 结构本身
  • delete(value):删除某个值,返回一个布尔值,表示删除是否成功
  • has(value):返回一个布尔值,表示该值是否为 Set 的成员
  • clear():清除所有成员,没有返回值
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        const s4 = new Set();
        //添加
        s4.add('a').add('b')
        console.log(s4.size);//2
        //删除
        const aaa = s4.delete('a')
        console.log(aaa);//删除判断true
        console.log(s4.size);//1

        //判断成员
        const bbb = s4.has('b')
        console.log(bbb);//true

        //清空
        s4.clear();
        console.log(s4.size);//0
遍历

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
s.forEach(value => console.log(value))
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022 年 10 月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ES6相关概念及新增语法
ES 的全称是 ECMAScript , 它是由 ECMA 国际标准化组织,制定的一项脚本语言的标准化规范。
星辰_大海
2020/10/27
4160
ES6相关概念及新增语法
前端成神之路-es6-ES6概念&新增语法&内置对象拓展
ES 的全称是 ECMAScript , 它是由 ECMA 国际标准化组织,制定的一项脚本语言的标准化规范。
海仔
2021/01/29
4750
ES6归纳总结
let 的特点 let声明的变量只在所处的块级有效(块级作用域不受外部影响具有暂时死区特性),也就是说在{ }内声明的变量,只在 { }中可以使用,在其他地方不能使用。 防止循环变量,变成全局变量。 for(var i=0;i<3;i++){ } console.log(i);// 输出 3 for(let i=0;i<3;i++){ } console.log(i);/// 未定义 不存在变量提升 具有暂时死区 var num = 10; if (true){ console.log(num); //
用户4344670
2020/02/24
6620
前端架构师之01_ES6_基础
简单来说,ECMAScript是JavaScript语言的国际标准,JavaScript是实现ECMAScript标准的脚本语言。
张哥编程
2024/12/13
1730
ES6相关概念与ES6新增语法
ES 的全称是 ECMAScript , 它是由 ECMA 国际标准化组织,制定的一项脚本语言的标准化规范。
梨涡浅笑
2020/10/28
4650
ES6相关概念与ES6新增语法
ES6常用语法总结
ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准。因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015。也就是说,ES6就是ES2015。虽然目前并不是所有浏览器都能兼容ES6全部特性,但越来越多的程序员在实际项目当中已经开始使用ES6了。今天就来总结一下在工作中es6常用的属性方法
小周sir
2019/09/23
3710
二、ES6新语法
图中可对比看出,如果用var声明,在循环外部还是可以使用i变量;但用let声明变量,循环外部不可以使用n变量
Dreamy.TZK
2020/07/03
4150
ES6新特性梳理汇总
在日常开发中,我的建议是全面拥抱let/const,一般的变量声明使用let关键字,而当声明一些配置项(类似接口地址,npm依赖包,分页器默认页数等一些一旦声明后就不会改变的变量)的时候可以使用const,来显式的告诉项目其他开发者,这个变量是不能改变的,同时也建议了解var关键字的缺陷(变量提升,污染全局变量等),这样才能更好的使用新语法
心念
2023/01/11
8910
ES6新特性
ES6的常用新特性简介,全部特性可参阅 Ecma-International MDN ES6入门 ES6 教程
WindRunnerMax
2020/08/27
8210
ES6新特性
由于ES6在一些低版本的浏览器上无法运行,需转成ES5之前的版本兼容,以下有几种方案可以自动转换
jinghong
2020/05/09
1.1K0
ES6新特性
「JS高级」ES6
请注意,本文编写于 2056 天前,最后修改于 169 天前,其中某些信息可能已经过时。
曼亚灿
2023/05/17
1.8K0
「JS高级」ES6
简单说说ES6新特性
ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了。它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。 ECMAScript和JS的关系 ECMAScript是标准,JS是实现 类似于HTML5是标准,IE,chrome是实现    例如国家定了医用口罩标准 (需要过滤XX,等等各种参数),咱们买的正规口罩是实现 目前ECMAScript除了JS还没别的实现,所以ECMAScript
IT大咖说
2022/03/21
1.1K0
ECMAScript简介以及es6新增语法
ECMAScript简介 ECMAScript与JavaScript的关系 ECMAScript是JavaScript语言的国际化标准,JavaScript是ECMAScript的实现。(前者是后者的规格,后者是前者的实现。但通常两者是可互换的。) ESMAScript的历史 1996年11月,Netscape公司将Js提交给国际化标准组织ECMA,当初该语言能够成为国际化标准。  1997年,ECMAScript 1.0版本推出。(在这年,ECMA发布262号标准文件(ECMA-262)的第一版,规定浏览
人生不如戏
2018/05/30
4500
ES6 记录
var 是全局作用域,往windows里面写入,可先使用后声明,也可重复定义不建议使用
晚上没宵夜
2022/05/09
5020
ES6学习笔记(一)
ES6的标准发布很久了,ES7和ES8已经出来了,直到现在才开始学习,已经有点晚了,希望可以赶得上吧。
CherishTheYouth
2019/07/30
5980
ES6学习笔记(一)
谈谈ES6语法(汇总上篇)
ES6可以说是一个泛指,指5.1版本以后的JavaScript的下一代标准,涵盖了ES2015,ES2016,ES2017等;亦指下一代JavaScript语言。
Jimmy_is_jimmy
2019/07/31
7460
ES6新增特性
在ES6新特性中,增加的两个声明变量和常量的方法,let用于声明变量,const用于声明常量。
青梅煮码
2023/01/31
7720
JavaScript 设计模式学习第四篇-ES6 中可能遇到的知识点
ES6(ECMAScript 6,ES2015)原来指的是 ECMA 组织在 2015 年发布的 ECMAScript 2015 标准,以后发布的 ECMAScript 2016 对应 ES7,依此类推。今年发布的 ECMAScript 2019 标准对应的就是 ES10。相比于之后发布的这些版本,ES6 的改变幅度非常大,因此我们通常说的 ES6 广义上也包括 ES5 之后的所有更新。
越陌度阡
2020/11/26
5060
JavaScript 设计模式学习第四篇-ES6 中可能遇到的知识点
90% 的前端都会使用 ES6 来简化代码,你都用过哪些?
ECMA-262:主标准,由 ECMA 国际组织(Ecma International)负责管理(为了让最初的JavaScript 与最初的 JScript 能遵循同一套标准发展而诞生的 ECMAScript ,正好排到了作为 Ecma 的 262 号标准,所以得到 ECMA-262 编号。)
coder_koala
2021/05/28
4830
Es6新特性之【变量-块级作用域-字符串模板-解构赋值】
Es6相对于Es5做出了很多改变,如变量的声明,箭头函数,块级作用域,模板字符串等等 本文将一一介绍Es6的新特性
切图仔
2022/09/08
4440
Es6新特性之【变量-块级作用域-字符串模板-解构赋值】
相关推荐
ES6相关概念及新增语法
更多 >
LV.1
这个人很懒,什么都没有留下~
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档