ECMAScript2015(ES6)

本文介绍了JavaScript中的高级特性,包括let声明的变量没有变量提升和暂存性死区,const的只读特性,Symbol用于创建独一无二的属性名,class简化了对象类型的声明,forof遍历方式,以及数据解构、模板字符串的使用。此外,还讨论了箭头函数的this绑定规则,Proxy对象用于对象访问代理,Set和Map数据结构的特点和操作方法。
摘要由CSDN通过智能技术生成

let 与块级作用域

- 什么是块?
    - 在代码中用 花括号 { } 包裹起来的范围 就是块
- 块级作用域
    - 块级作用域就是花括号包裹起来的范围
- 特性
    - 在块级作用域外面是无法访问块级作用域里面的元素  
在块级作用域可以访问外层作用域的变量

let

- 特性
    - let 声明的变量 不会有变量提升  
    - 不能重复声明  
    - 暂存性死区
        - 暂存行死区出现就是因为let不会有变量提升 在执行上下文创建阶段变量环境组件中不会对 let 进行记录 所以会有变量提升 和暂存行死区出现

const (恒量/常量) & Symbol

constlet的区别
    constlet的区别 就在于 只是在let 的基础上多了一个 只读特性
    只读 就是 变量声明了以后 不可以再被修改

Symbol
    主要作用就是为对象添加独一无二的属性名

class类 & for of

classES中都是通过定义函数 及函数的原型对象来去实现的类型  
    自从ES2015开始 就可以使用class 关键词 去声明一个 类型   
    这种独立定义类型的语法 相比较之前函数的方方式更容易理解 解构更加清晰

for of
    for of 是一种数据同意遍历方式 拿到是是每一个元素 不是下标
    break: 终止循环
    使用
        for (const item of arr) {  
          log(item)  
          if(item > 100){  
            break  
          }  
        }

数据解构  Destructuring

  • ES2015 (ES6)中新增了 从数组和对象中 获取指定元素的语法 这种语法叫解构

  • 数组解构

    const arr = [100,200,300]
    const [ ,x , baz] = arr
    const [foo, ...rest] = arr
    const [foo] = arr
    // 如果解构后的数组超出原有数组长度 后面解构添加的值 会是undefined
    const [foo,bar,baz,more] = arr
    // 如果给解构的值赋一个默认值 如果数组中 没有这个值的话 我们会得到一个默认值 如果有的话 就会取数组中的值
    const [foo,bar,baz = '134',more='defult value'] = arr
    console.log(baz,more);
    
  • 对象解构

    • 对象的解构需要根据属性名 去匹配提取 而不是位置 因为数组中的数据是有下标 有顺序规则的
       而对象里面的成员是没有一个固定的顺序 所以说对象不能按照位置去提取数据
    const obj = {name:'zzz',age:88}
    // 对象解构 通过属性名获取对象中对应的值
    // const {name} = obj
    // console.log(name);
    
    // 这样会命名冲突 需要重命名去避免这样的问题出现
    const name = 'tom'
    // const { name } = obj 
    // 左边的name 是用于匹配对象中的值 右边是我们匹配到的值的属性名称
    const { name:objNmae } = obj 
    console.log(objNmae)
    

模板字符串

  • 模板字符串和 传统定义字符串的区别
    传统字符串 不支持换行 如果需要换行 我们需要用 \n 这种字符来表示 而在模板字符串中 支持多行字符串 模板字符串还支持 通过插值表达式的方式 在字符串中去嵌入都对应的数值
    
  • 字符串的扩展方法
    includes()  // 判断中间部分是否包含某些内容 
    startsWith() // 判断以 xxx 开头 有就为 true 没有为 false
    endsWith()  // 判断以 xxx 结尾 有就为 true 没有为 false
    
    const message = 'Error: foo is not defined'
    const { log } = console
    // log(message.includes('Er'))
    // log(message.startsWith('Error'))
    // log(message.endsWith('defined'))
    

参数默认值 & 剩余参数 & 箭头函数

  • 为函数设置默认值

    // 1. 函数形参 设置默认值
    function foo(enable) {
      enable = enable === undefined ? true : enable
      console.log(enable)
    }
    foo('ss')
    // 2. 设置默认值的参数 需要 放在函数最后一位 
    function bar(value,parms={}){
      console.log(value,parms);
    }
    bar('val')
    
  • … 操作符 也叫(剩余操作符)

    这函数接收形参位置 使用 ... 表示 从当参数位置开始接收往后所有的参数由于是接收所有参数 这个只能放在形参的最后一位 而且只能使用一次
    function foo(...args){  
      console.log(args);  
    }  
    foo(1,2,3,4)  
    
    /*   
      展开数组  
    */  
    
    const arr = [1,2,3,4]  
    console.log(...arr);
    
  • 箭头函数

1、使用箭头函数 可以使我们代码更简洁   

2、箭头函数的this 谁调用 this就指向谁  

3、在需要自己定义 this的情况下 可以使用 箭头函数来避免使用 自定义 this

语法
  let fun = () => {}

proxy

- 什么是proxy
    - 专门为对象设置访问代理器
    
- Proxy('需要代理的目标对象','代理的处理对象')
    - 代理的处理对象
        - 通过 get方法来监视属性访问  
          get 方法接收两个值  get(目标对象, 访问的属性)  
          
        - 通过 set方法来监视设置属性  
          set 接收三个参数 set(目标对象,访问属性,修改的值)  
          
          
语法及使用          
    const { log } = console
    const pramsObj = {
      name: 'tom',
      age: 18
    }

    const { log } = console
    const pramsObj = {
      name: 'tom',
      age: 18
    }

    const prosn = new Proxy(pramsObj, {
      get(target, val) {
        // log(target , val)
        // 判断是否有当前属性 如果没有返回默认值 
        // log(val in target)
        return val in target ? target[val] : '对象没有当前属性'
      },
      set(target, parms, val) {
        // log(Number.isInteger(val))
        // log(target,parms,val)
        if (parms === 'age' && !Number.isInteger(val)) {
          throw new TypeError('The current value does not have one type Number')
        }
        target[parms] = val
      }
    })
    // log(prosn.xxx)
    prosn.age = 16
  • Proxy 对比 defineProperty
    • Proxy更好的支持对于数组对象的监视重写数组的操作方法
      Proxy 是以 非入侵的方式监管了对象的读写

Set & Map

  • Set方法
size
    Set.size 获取数据长度
has
    Set.has('x') 查询是否包含当前数据
delete
    Set.delete() 删除当前数据
clear
    Set.clear() 清空所有
  • Map
- Map 和 object 的区别
        - Map 能以任意字符的 作为数值的键 而 对象只能以字符作为键
- Map方法
    - set
        - 设置数据 map.set(key,value)
    - get
        - 获取数据 map.get(key)
    - has
        - 判断是否存在当前键(key) map.has(key)
    - delete
        - 删除当前键(key) map.delete(key)
    - clear
        - 清空所有的值 map.clear()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值