es6新增详解

矫情吗;* 2022-12-20 03:28 287阅读 0赞

文章目录

  • 一、es6是什么
        1. 官方回答
        1. 本人理解
  • 二、版本新增
        1. let 和 const 和 var 的区别
      • 2.解构赋值
      • 3.模板字符串
      • 4.字符串新增
      • 5.函数的新增
      • 6.箭头函数
      • 7.数组新增
      • 8.对象新增
        • 1.对象的简洁:
        • 2.方法的简洁:
        • 3.新增对象方法:
      • 9.扩展运算符
      • 10.promise
      • 11.async await
      • 12.class类构造器
      • 13.class静态属性和静态方法
      • 14.set和map数据结构
        • set数据结构
        • map数据结构
      • 15.模块化

一、es6是什么

1. 官方回答

ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了。Mozilla公司将在这个标准的基础上,推出JavaScript 2.0。

2. 本人理解

es6.0版本
js版本,2015年六月推出的版本
ECMAScript组织 javascript 1.0 2.0 3.0 4.0 5.0
es6比es5,有更强的语法。以及增强和新增,它泛指js的下一个版本
每年六月会发布一次新版本

二、版本新增

1. let 和 const 和 var 的区别

  1. var 弱类型语言
  2. 1. 重复声明使用,第二次声明会覆盖之前的
  3. 2. 存在变量提升
  4. let:
  5. 1. 不允许重复声明使用,否则报错
  6. 2. 不存在变量提升
  7. const:(常量)
  8. 1.声明时必须要有初始值 不允许重复声明使用,否则报错
  9. 2. 不存在变量提升
  10. 3. 不可改变,改变报错

使用场景:

  1. const num = 3
  2. const arr = [];
  3. const obj = { }
  4. 作用域:全局作用域
  5. var
  6. 局部作用域
  7. function
  8. 块级作用域
  9. {}

2.解构赋值

  1. //数组解构赋值:
  2. let [a,b,c] = [1,2,3]
  3. //作用:快速声明变量,数组对数组,值对值
  4. //扩展运算符:
  5. ...
  6. let [a = 1,b,...c] = [,2,3,4,5,6]
  7. console.log(a,b,c)
  8. //对象解构赋值:
  9. //作用:快速获取数据
  10. //方式一:
  11. let obj = {
  12. name:'张飞',
  13. age:18,
  14. sex:'男'
  15. }
  16. console.log(obj.name) //张飞
  17. let{ name,age,sex} = obj
  18. console.log(name) //张飞
  19. console.log(age) //18
  20. console.log(sex) //男
  21. //方式二:
  22. function add({ name, age }) {
  23. console.log(name, age) //111,222
  24. }
  25. add({ name: 111, age: 222 })
  26. //如果遇到敏感关键字或浏览器封装好的关键字
  27. let { delete:del = '默认'} = { delete:'删除'}
  28. console.log(del) //删除

3.模板字符串

语法:

  1. `hello ${ 变量}`

4.字符串新增

  1. 'hello'.includes('l') //判断字符串是否包含特定字符 如果包含返回true,否则返回false
  2. indexOf() //查找字符串在字符串中的位置,如果找到了返回索引,否则返回-1
  3. startWith() //判断字符串中是否以特定字符开头,如果是,返回true,否则false
  4. endsWith() //判断字符串中是否以特定字符结尾,如果是,返回true,否则false
  5. padStart() //在字符串开始位置填充
  6. padEnd() //在字符串结尾位置填充
  7. repeat() //重复字符串 方法不可以传负数,整数向下取整

5.函数的新增

函数默认值:

  1. let f = function(a=100){
  2. console.log(a) //100
  3. }
  4. f()

函数参数rest用法:

  1. let f = function (...arr) {
  2. // console.log(arguments)
  3. // let arr = [];
  4. // for(let i = 0;i<arguments.length;i++){
  5. // arr.push(arguments[i])
  6. // }
  7. console.log(arr)
  8. }
  9. f(1,2,3,4)
  10. //通过...arr在函数传参中,就可以在函数内部拿到一个数组,数组中就是参数的集合

6.箭头函数

  1. //箭头函数:
  2. 语法:() =>{
  3. //代码块
  4. }
  5. //普通函数
  6. let fn = function({ str}) {
  7. console.log(str)
  8. }
  9. //this指向 :传统的函数内部this指向谁调用方法,this指向谁
  10. //箭头函数
  11. let fn2 = ({ str}) =>{
  12. console.log(`箭头函数${ str}`)
  13. }
  14. fn({ str:'函数'})
  15. fn2({ str:'厉害'})
  16. 作用:解决this指向问题,this定义时(上下文中的this),this的指向
  17. 特点:1.this指向的是定义时(上下文中的this)
  18. 2. 箭头函数中不能使用arguments
  19. 3. 箭头函数不可用构造器(工厂函数)
  20. 箭头函数简写:
  21. 箭头函数参数,只有一个可以把()省略,函数体只有一行代码,可以省略{}

7.数组新增

  1. es5
  2. for(){} 可以循环数组,可以循环伪数组
  3. forEach() 可以循环数组,不可以循环伪数组
  4. map()(映射) 可以循环数组,批量处理数据,循环具备return,返回新数组
  5. filter() 过滤循环 return 就是过滤条件,循环会把每一项符合条件的数据,返回一个新数组中
  6. some() 循环每一条数据,循环条件如果有一个符合,返回true,否则返回false
  7. every() 循环每一条数据,循环条件都符合,返回true,否则返回false
  8. es6新增
  9. fill() 数组填充 方法第一个参数为填充的内容,第二个参数填充起始位置,第三个参数结束位置
  10. includes() 数组数据是否包含,判断数组中是否包含某个特定字符,对比的是每一项,如果有返回true,否则返回false
  11. indexOf() 数组中查找,如果有返回索引,如果没有返回-1
  12. find() 数组中查找符合条件的数据,如果符合条件退出循环,将符合条件的数据返回成新的值,找不到返回undefined
  13. findIndex() 数组中查找符合条件的数据,如果符合条件退出循环,返回下标索引,找不到返回-1

8.对象新增

1.对象的简洁:

  1. let name = '张飞'
  2. let obj = {
  3. name
  4. }
  5. console.log(obj)
  6. //总结:属性的总结,使用的变量和属性名相同时,那么可以省略成一个属性

2.方法的简洁:

  1. let name = '张飞'
  2. let obj = {
  3. name,
  4. // say:function(){
  5. // alert('你好'+this.name)
  6. // }
  7. say(){
  8. alert('你好'+this.name)
  9. }
  10. }
  11. console.log(obj)
  12. obj.say()
  13. //总结:可以直接省略成say(){}

3.新增对象方法:

  1. Object.is() //判断两个对象,是否一样
  2. Object.assign() //对象合并方法
  3. Object.keys() //拿到对象中属性集合
  4. Object.values() //拿到对象中属性值集合
  5. Object.entries() //拿到对象中键值对集合
  6. //浅拷贝实现方式:
  7. Object.assign()
  8. //扩展运算符...
  9. //最简单深拷贝
  10. let a = [1,2,3,{ name:'张飞'}]
  11. let b = JSON.parse(JSON.stringify(a))
  12. a[3].name = 123
  13. console.log(a,b)

9.扩展运算符

  1. 语法:...
  2. 1. 可以展开字符串,字符串转换数组
  3. 2. 可以浅拷贝,对象和数组都可以进行展开实现浅拷贝
  4. 3. 伪数组可以转换成数组
  5. 4. 可以用rest方式,在函数中可以快速拿到所有参数集合生产一个数组,在数组结构中,可以将剩余的值,当到变量

10.promise

Promise是异步编程的一种解决方案,比传统的回调函数更强大和高效,最早是由社区提出并实现 ECMA觉得不错,就把promise加到api,他其实就是一个对象,对象中装载着未来某个状态

异步表现形式:

  1. 定时器
  2. ajax请求
  3. 回调函数

回调地狱:函数嵌套
promise可以解决回调地狱问题
浏览器提供构造函数,在定义一个promise对象时,注意:参数是回调函数,回调函数第一个参数为成功resolve,失败回调为reject
通过原型上的then方法,可以拿到resolve返回的参数
通过原型上的catch方法,可以拿到reject返回的参数
使用方式:

  1. let p = new Promise((resolve,reject)=>{
  2. resolve('成功')
  3. })
  4. console.log(p)
  5. p.then((res)=>{
  6. console.log(res)
  7. })
  8. 特点:1. 一旦创建,立即执行
  9. 2. 返回结果不受外界影响

11.async await

async 异步
await 等待
作用:async也是异步编程的一种方式,更好的解决异步编程
特点:async返回的一直是promise对象,可以结合结构赋值进行预处理响应数据

  1. let fun = async function () {
  2. let { data } = await request()
  3. }
  4. fun()

12.class类构造器

ECMA推出的构造函数,语法糖(功能不变,用法有变化)
java和.net后端语言都具备面向对象 class类的方式进行构造
语法:

  1. class Person { //原型对象
  2. constructor(name) { //构造方法
  3. this.name = name
  4. }
  5. }
  6. let p = new Person('张飞')
  7. //继承:
  8. class Child extends Person {
  9. constructor(name,age) { //构造方法
  10. super(name) //作用就是调用了Person中的constructor
  11. this.age = age
  12. }
  13. }
  14. let c = new Child('刘备',18)

13.class静态属性和静态方法

  1. 在类构造函数中,static关键字定义属性和方法、
  2. 然后使用 构造函数中直接调用属性或方法
  3. Person.user
  4. Person.fun()
  5. 继承之后,子构造器,继承父构造器的静态属性和静态方法

14.set和map数据结构

set数据结构

语法:

  1. let set = new Set()

特点:
set数据结构中不允许重复值,去重

  1. // set数据结构转换成数组
  2. Array.form(set)
  3. [...set]

方法或属性:
size属性:返回的就是set数据结构中的数量
has():判断set数据结构中是否有特定的值
add():向set数据结构中添加一个数据
delete():删除指定数据
clear():清空数据结构

  1. //最简单数组去重:
  2. let arr = [1,2,6,1,7,4,2,7,7,5,4,5,8,55,5,2,2,3,1,1,1,2,3,1,8,9,9,8,4,4,5,1]
  3. let newArr = [...new Set(arr)]

map数据结构

语法:

  1. let map = new Map()
  2. 特点:可以以任意数据类型进行key value形式存储
  3. 具备的方法:
  4. size属性:返回数据数量
  5. set(),向map数据结构中进行存储,第一个参数为key,第二个参数为valve
  6. delete():删除指定的数据
  7. get()在map数据结构中获取相应数据
  8. clear():全部清除
  9. has(),判断是否有这条数据

15.模块化

在之前的javascript中是没有模块化概念的。如果要进行模块化操作,需要引入第三方的类库。随着技术的发展,前后端分离,前端的业务变的越来越复杂化。直至ES6带来了模块化,才让javascript第一次支持了module。ES6的模块化分为导出(export)与导入(import)两个模块。

我们先来创建一个test.js文件,来对这一个变量进行输出:

  1. export let str ="hello es6";

然后可以创建一个index.js文件,以import的形式将这个变量进行引入:

  1. import { str } from "./test.js";
  2. console.log(str);//hello es6

发表评论

表情:
评论列表 (有 0 条评论,287人围观)

还没有评论,来说两句吧...

相关阅读

    相关 ES6新增内容

    1、map、filter和reduce的区别 map 作用是生成一个新数组,遍历原数组,将每个元素拿出来做一些变换然后放入到新的数组中。map 的回调函数接受三个参数,分

    相关 ES6新增的循环

    1、以前for循环,for in循环 2、ES6新增循环:for of 循环:遍历(迭代,循环)整个对象, 两者的区别: for in循环:既可以循环数组,