1.ES6简介

1.1什么是es6?

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

1.2为什么使用ES6

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

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

2.ES6的新增语法

2.1let

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

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

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

  • 不存在变量提升

  • 暂时性死区

    在块级作用域内声明的变量,就和这个块级作用域进行了整体的绑定,此代码会报变量未定义的错误。

let经典面试题1:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><script>var arr = [];for (var i = 0; i < 2; i++) {arr[i] = function() {console.log(i);}}arr[0](); //2arr[1](); //2</script>
</body></html>

结果:

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

let经典面试题2:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><script>let arr = [];for (let i = 0; i < 2; i++) {arr[i] = function() {console.log(i);}}arr[0]();arr[1]();</script>
</body></html>

结果:

解析:此题的关键点在于每次循环都会产生一个块级作用域,每个块级作用域的变量都是不同的,函数执行时输入的时自己上一级(循环产生的块级作用域)作用域下的值。

2.2const

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

  1. 具有块级作用域
  2. 声明常量时必须赋值
  3. 常量赋值后,值不能修改

3.let. const. var的区别

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

4.解构赋值

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

4.1数组解构

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

4.2对象解构

写法1:

写法2:

4.3箭头函数

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

箭头函数的特点:(1)函数体中只有一句代码,且代码的结果就是返回值,可以省略大括号

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

function fn(v){rerurn v;
}
//箭头函数写法
const fn = v => v;

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

箭头函数面试题:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><script>var age = 100;var obj = {age: 20,say: () => {alert(this.age);}};obj.say(); //100//解析:对象不能产生作用域,say()方法实际是被定义在全局作用域下,say方法中的this指向的是window</script>
</body></html>

5.剩余参数

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

(2)剩余参数和解构配合使用

6.Array的扩展方法

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

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

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

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

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


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

6.3实例方法:find()
用于找出第一个符合条件的数组成员,如果没有找到就返回undefined

6.4实例方法:findIndex()

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

6.5实例方法:includes()

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

7.String的扩展方法

7.1模板字符串

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

模板字符串的特点:
①模板字符串可以解析变量

<script>let name = '张三';console.log(name);let sayHello = `Hello, 我的名子叫${name}`;console.log(sayHello);</script>

②模板字符串可以换行

 <script>let result = {name: 'zhangsan',age: 20}let html = `<div><span>${result.name}</span><span>${result.age}</span></div>`;console.log(html);</script>

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

7.2实例方法:startWith()和endWith()

  • starWith():表示参数字符串是否在原字符串的头部,返回布尔值。
  • endWith():表示参数字符串是否在原数组的尾部,返回布尔值

    7.3实例方法:repeat()

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

8.Set数据解构

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

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

const s = new Set();

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

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

实例方法:

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

    遍历:

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

JavaScript高级教程(25)——ES6相关推荐

  1. 尚硅谷JavaScript高级教程(javascript实战进阶)学习笔记

    前言 这个是我学习过程中的笔记,分享给大家,希望对大家有用. 学习内容是尚硅谷JavaScript高级教程(javascript实战进阶),这里是视频链接. 我在前面有两篇对于web前端HTML和CS ...

  2. 【javascript高级教程】JavaScript Array(数组) 对象

    数组对象的作用是:使用单独的变量名来存储一系列的值. 创建数组, 为其赋值: var mycars = new Array(); mycars[0] = "Saab"; mycar ...

  3. 【javascript高级教程】JavaScript 对象

    JavaScript 中的所有事物都是对象:字符串.数值.数组.函数...及自定义对象 JavaScript 提供多个内建对象,比如 String.Date.Array 等等. 对象只是带有属性和方法 ...

  4. 菜鸟教程 之 JavaScript 高级教程

    From:https://www.runoob.com/js/js-objects.html JavaScript 对象 JavaScript 中的所有事物都是对象:字符串.数值.数组.函数... ( ...

  5. javascript高级教程

    脚本语言:指WEB浏览器内由解释器执行的语言. javascript对象模型 window->document->form->table,button,text. 1.window为 ...

  6. 【javascript高级教程】JavaScript 字符串(String) 对象

    String 对象用于处理已有的字符块. JavaScript 字符串 一个字符串用于存储一系列字符就像 "John Doe". 一个字符串可以使用单引号或双引号: var car ...

  7. 【javascript高级教程】JavaScript Number 对象

    JavaScript 只有一种数字类型.可以使用也可以不使用小数点来书写数字. var pi=3.14; // 使用小数点 var x=34; // 不使用小数点 极大或极小的数字可通过科学(指数)计 ...

  8. 【JavaScript高级教程】JavaScript prototype(原型对象)

    所有的 JavaScript 对象都会从一个 prototype(原型对象)中继承属性和方法. function Person(first, last, age, eyecolor) {this.fi ...

  9. JavaScript高级教程-代理与反射

    代理与反射 一.代理基础 1. 创建空代理 2. 定义捕获器 3. 捕获器参数和反射 API 4. 捕获器不变式 5. 可撤销代理 6. 实用反射 API (1)反射 API 与对象 API (2)状 ...

最新文章

  1. 不停应用重启oracle数据库,此类情况下解决Oracle数据库重启的四种方案
  2. javaweb学习总结(三十八)——事务
  3. Android 拍照、从相册选择图片
  4. 如何查看Kubernetes pod yaml文件的在线语法帮助
  5. DataMan-美团旅行数据质量监管平台实践
  6. 使用Python为《围城》做一个图云
  7. Promise 最完整介绍与实现解密
  8. 安装inotify-tools监控工具
  9. 如何让 Mac 加入网络帐户服务器?
  10. 说说年度补税退税的问题
  11. nginx IP 80跳转443
  12. delphi 联合体_校园动态 | 西安市碑林区大学南路小学“名校+”教育联合体召开“合木论坛”...
  13. 页面无法自动播放音频的解决方案
  14. 计算机系统:计算机系统的基本组成
  15. 【python】filetype根据内容推测文件类型
  16. 搞懂异地多活,看这篇就够了
  17. android 位置共享_如何与Android的受信任联系人共享您的位置
  18. 子类能访问父类的哪些成员?
  19. 她他它的用法?收藏给小孩看吧
  20. Struts的学习方法

热门文章

  1. 访问和操作H2数据库
  2. VR餐厅全新思路,可以为餐饮行业带来哪些好处?
  3. length和length()
  4. 带有数字钥匙的智能电动车已商用
  5. 学生证选课系统c语言大作业,学生选课管理系统c语言程序
  6. xp系统迁移到固态硬盘_通过网络轻松传输,将XP迁移到Windows 7
  7. 数据集:KITTI数据集分析
  8. 【ECCV2018 UPDT】Unveiling the Power of Deep Tracking[特征融合]
  9. 给零基础初学者推荐的10个Python免费学习网站,赶快收藏
  10. 将ping结果显示在html中,Ping使用方法大全