ES6-ES11-第一部分-let、const、解构赋值、模板字符串、简化对象写法、箭头函数、函数参数默认值、rest 参数、扩展运算符、Symbol、迭代器、生成器、Promise、Set、Map(一)

简介: ES6-ES11-第一部分-let、const、解构赋值、模板字符串、简化对象写法、箭头函数、函数参数默认值、rest 参数、扩展运算符、Symbol、迭代器、生成器、Promise、Set、Map

根据视频进行整理

【https://www.bilibili.com/video/BV1uK411H7on?p=1】

视频资源(百度网盘):

链接:【https://pan.baidu.com/s/1VBnPHafId30dWLhkI1DojA】

提取码:1234

ES6

1. let 关键字

let 关键字用来声明变量,使用 let 声明的变量有几个特点:

  1. 不允许重复声明
  2. 块儿级作用域
  3. 不存在变量提升
  4. 不影响作用域链

1.1 声明变量

// 可以使用let声明单个变量
      let a;
      // 可以在声明变量的同时赋值
      let b = 100;
      // 可以一次同时声明多个变量
      let c,d,e;
      // 可以声明多个变量同时赋值
      let f = 'abc', g = 123, h = {}, i = [];
      // 变量不能重复声明
      // let a = 100;

var 可以重复声明变量:

var j = 100;
      var j = [];
      console.log(j)

1.2 块级作用域

{
        let age = 12;
      }
      console.log(age)

var 不具有块级作用域

{
        var username = 'zs'
      }
      console.log(username)

1.3 不存在变量提升

var 声明变量,相当于在最前面声明一个变量。

console.log(myage)
      var myage = 20

上面代码相当于:

var myage
      console.log(myage)
      myage = 20

由于声明了没有赋值,所以输出为undefined

而 let 声明变量不会存在变量提升,会直接报错

console.log(myage)
      let myage = 20

1.4 不影响作用域链

{
        let myname = '张三'
        {
          // 在该作用域下没有 myname,会向上一级作用域寻找 myname
          // 找到输出
          console.log(myname)
          // 没有找到报错
          console.log(myage)
        }
      }

1.5 案例实践 – 点击 DIV 换色

使用 var 声明变量 i ,并且使用 items[i] 修改样式会报错

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      .item {
        width: 100px;
        height: 50px;
        border: solid 1px rgb(42, 156, 156);
        float: left;
        margin-right: 10px;
      }
    </style>
  </head>
  <body>
    <div>
      <div class="item"></div>
      <div class="item"></div>
      <div class="item"></div>
    </div>
    <script>
      // 获取元素
      let items = document.querySelectorAll('.item')
      // console.log(items)
      // 给元素绑定事件
      for( var i=0; i<items.length; i++ ) {
        items[i].onclick = function() {
          //修改当前元素的背景颜色
          // 使用 items[i] 进行修改
          items[i].style.background = 'pink'
        }
      }
    </script>
  </body>
</html>

原因使用 var 声明 i 相当于在全局声明了一个变量 i 每次 i++,相当于对全局的 i ++,事件绑定完成后 i 为3,当点击元素触发事件会导致数组下标越界。

使用 let 则不会,因为 let 存在块级作用域

// 获取元素
      let items = document.querySelectorAll('.item')
      // console.log(items)
      // 给元素绑定事件
      for( let i=0; i<items.length; i++ ) {
        items[i].onclick = function() {
          //修改当前元素的背景颜色
          // 使用 items[i] 进行修改
          items[i].style.background = 'pink'
        }
      }

2. const 关键字

const 关键字用来声明常量,const 声明有以下特点

  1. 声明必须赋初始值
  2. 标识符一般为大写
  3. 不允许重复声明
  4. 值不允许修改
  5. 块儿级作用域

2.1 声明常量

// 声明常量
    // 声明必须赋初始值
    // 标识符一般为大写(潜规则), 不大写也不报错, 只是常量习惯性大写
    const PI = 3.14
    console.log(3.14)

声明常量不赋初始值会报错

const A

2.2 不允许重复声明

const PI = 3.14
    const PI = 3.1415

2.3 值不允许修改

const PI = 3.14
    PI = 3.1415

2.4 块儿级作用域

const PI = 3.14
    {
      // 在该作用域下没有声明PI, 会向上一级作用域寻找
      console.log(PI)
    }

2.5 对于数组和对象的元素修改, 不算做对常量的修改

数组和对象变量中保存的为数组和对象的地址,改变对象和数组中的元素没有修改其地址,所以相当于没有修改数组和对象变量,不会报错

const ARR = ['a', 1, 2, 3, 45]
    ARR[0] = 0
    console.log(ARR)

声明对象类型使用 const,非对象类型声明选择 let

相关文章
|
3月前
|
前端开发 索引
Promise.all() 方法的参数可以是什么类型?
综上所述,`Promise.all()` 方法的参数类型较为灵活,但无论使用哪种类型的可迭代对象作为参数,其核心的异步操作处理逻辑和成功失败的判断机制都是一致的,都是为了方便地处理多个异步操作的并发执行和结果汇总。
|
2天前
|
编译器 容器
哈希表模拟封装unordered_map和unordered_set
哈希表模拟封装unordered_map和unordered_set
|
2天前
|
编译器 测试技术 计算机视觉
红黑树模拟封装map和set
红黑树模拟封装map和set
|
3月前
|
前端开发 索引
Promise.all() 方法的参数可以是哪些数据类型?
`Promise.all()` 方法的参数具有很大的灵活性,可以适应多种不同的场景和需求,方便地处理多个异步操作的并发执行和结果汇总。
|
2月前
|
算法
你对Collection中Set、List、Map理解?
你对Collection中Set、List、Map理解?
79 18
你对Collection中Set、List、Map理解?
|
3月前
|
前端开发
`Promise.all()`方法在处理数组形式参数时的执行机制
Promise.all()` 提供了一种方便的方式来同时处理多个异步操作,并在它们都完成后获取到所有的结果,使得我们能够更高效地进行异步任务的组合和处理。
|
2月前
|
存储 缓存 安全
只会“有序无序”?面试官嫌弃的List、Set、Map回答!
小米,一位热衷于技术分享的程序员,通过与朋友小林的对话,详细解析了Java面试中常见的List、Set、Map三者之间的区别,不仅涵盖了它们的基本特性,还深入探讨了各自的实现原理及应用场景,帮助面试者更好地准备相关问题。
73 20
|
3月前
|
存储 C++ 容器
【C++】map、set基本用法
本文介绍了C++ STL中的`map`和`set`两种关联容器。`map`用于存储键值对,每个键唯一;而`set`存储唯一元素,不包含值。两者均基于红黑树实现,支持高效的查找、插入和删除操作。文中详细列举了它们的构造方法、迭代器、容量检查、元素修改等常用接口,并简要对比了`map`与`set`的主要差异。此外,还介绍了允许重复元素的`multiset`和`multimap`。
59 3
【C++】map、set基本用法
|
3月前
|
存储 算法 C++
【C++】unordered_map(set)
C++中的`unordered`容器(如`std::unordered_set`、`std::unordered_map`)基于哈希表实现,提供高效的查找、插入和删除操作。哈希表通过哈希函数将元素映射到特定的“桶”中,每个桶可存储一个或多个元素,以处理哈希冲突。主要组成部分包括哈希表、哈希函数、冲突处理机制、负载因子和再散列,以及迭代器。哈希函数用于计算元素的哈希值,冲突通过开链法解决,负载因子控制哈希表的扩展。迭代器支持遍历容器中的元素。`unordered_map`和`unordered_set`的插入、查找和删除操作在理想情况下时间复杂度为O(1),但在冲突较多时可能退化为O(n)。
37 5
|
4月前
|
存储 JavaScript 前端开发
Set、Map、WeakSet 和 WeakMap 的区别
在 JavaScript 中,Set 和 Map 用于存储唯一值和键值对,支持多种操作方法,如添加、删除和检查元素。WeakSet 和 WeakMap 则存储弱引用的对象,有助于防止内存泄漏,适合特定场景使用。