ES6:let和const命令解读以及变量的解构赋值

有时候,我们需要的不是答案,而是一双倾听的耳朵

文章目录

          • let和const命令
          • 变量的解构赋值

let和const命令
  • let和const命令都是声明变量的关键字,类同var
  • let特点
    • 用来声明变量,不能再次定义,但是值可以改变
    • 存在块级作用域
    • 不存在变量提升(暂时性死区),好的语法习惯先声明后使用
    • let在全局环境下统一的变量,不会挂载到window对象下
    {
      let a = 10
      var b = 2
    }
    a // a is not defined
    b // 2
    
  • const特点
    • 定义常量(固定的值),不能再次定义,不能修改值
    • 定义常量的时候必须有值
    • 存在块级作用域
    • 不存在变量提升(暂时性死区),好的语法习惯先声明后使用
    • const在全局环境下统一的变量,不会挂载到window对象下
    const PI = 3.1415
    PI // 3.1415
    PI = 3  // Assignment to constant variable
    
变量的解构赋值
  • 数组的结构赋值
    const arr = [40, 10, 100]
    // 得到所有数据,通过变量去接收
    const a = arr[0]
    const b = arr[1]
    const c = arr[2]
    console.log(a, b, c) // 40 10 100
    // ES6中解构赋值
    const arr1 = [40, 10, 100]
    // 情况1:数组有几项数据,就定义几个变量,一一对应
    const [a1, b1, c1] = arr
    console.log(a1, b1, c1) // 40 10 100
    // 情况2:变量少于数组长度,按照变量的顺序进行对应即可
    const [a2, b2] = arr
    console.log(a2, b2) // 40 10
    // 情况3:变量多于数组长度,按照变量的顺序进行对应,多余的变量值就是undefined
    const [a3, b3, c3, d] = arr
    console.log(a3, b3, c3, d) // 40 10 100 undefined
    // 情况4:按需取值,使用空占位即可
    const [, b4, c4] = arr
    console.log(b4, c4) // 10 100
    // 情况5:除去某几项,得到剩余的所有选项 (...的作用:剩余匹配)
    const [a5,...arr2] = arr
    console.log(arr2) // [10, 100]
    // 情况6:多维数组解构赋值,把握结构对应即可
    const arr3 = [1, 2, [100, 200]]
    const [, , [a6, b6]] = arr3
    console.log(a6, b6) // 100 200
    
  • 对象的解构赋值
    const obj = { 
      name: 'tom', 
      age: 10, 
      hobby: { ball: '打球', game: '游戏' }
    }
    // 解构赋值
    const {name, age, hobby: {game}} = obj
    // 等同于
    const name = obj.name
    const age = obj.age
    const game = obj.hobby.game
    console.log(name, age, game) // tom 10 游戏
    
  • 函数相关
    • 箭头函数

      // 1.如果形参只有一个,则可以省略小括号
      var fn = x => {
        return x * x
      }
      console.log(fn(4)) // 16
      // 2.如果函数只有一行代码,则可以省略大括号,并且自带return效果(意思是自动将函数体返回)
      var fn1 = (x, y) => x + y
      console.log(fn1(2, 3)) // 5
      var fn2 = x => x * x 
      console.log(fn2(2)) // 4
      // 3.箭头函数内部没有arguments对象 (arguments对象,可以获取到函数所有的实参)
      var fn3 = () => { console.log(arguments) } // 报错,没有找到arguments对象
      fn3()
      var fn4 = (x, y, ...z) => {
      	// x 用于接收第一个实参的值
      	// y 用于接收第二个实参的值
      	// z 用于接收剩余所有实参的值
      	console.log(x) // 1
      	console.log(y) // 3
      	console.log(z) // 5, 7, 9, 10
      }
      fn4(1, 3, 5, 7, 9, 10)
      var fn5 = (...value) => { console.log(value) } // 使用value接收所有实参的值
      fn5(2, 4, 6, 8, 10)
      // 4.注意: 箭头函数内部的this执行和之前不一样了
      // this的值取决于声明的环境,不取决于调用的环境
      // 理解为: 箭头函数没有自己的this 或者 箭头函数内部的this执行外部作用域
      var fn6 = () => { console.log(this) } // window
      fn6()
      var obj = { abc: fn }
      obj.abc() // 还是window对象,和谁来调用没关系
      const obj1 = {
      	age: 17,
      	say() {
           console.log(this.age) // 此时的this是obj本身
        },
        say2: () => {
        	console.log(this.age) // 此时的this是window,是当前函数作用域外部的作用域
        },
        // say3属于obj的一个普通函数,此时this就是obj本身
        say3() {
        	setTimeout(function () {
          // 这个位置是一个匿名函数,一般this指向的是window
          console.log(this.age)
        }, 1000)
        setTimeout(() => {
        	// 没有this,使用的是外层作用域的this,就是obj本身
        	console.log(this.age)
        }, 1000)
       }
      }
      obj1.say() // 17
      obj1.say2() // undefined
      obj1.say3() // undefined 17
      // 5.箭头函数不能当做构造函数
      var fn7 = () => {}
      var obj = new fn7() // 报错,fn is a constructor
      

      在这里插入图片描述

    • 参数默认值

      // 之前的写法
      function fn(a) {
      	// 没有传参的时候,可以做一个默认值处理
      	a = a || '默认值'
      	console.log(a)
      }
      fn()
      // ES6写法
      function fn(a = '默认值') {
        // 如果调用参数没有传参a, 那么a的默认值就是 = 后的值
        console.log(a)
      }
      fn()
      
    • 匹配剩余参数

      // 之前的写法
      const add = (a, b, c) => {
        // 累加所有的参数
        return a + b + c
      }
      console.log(add(1, 4, 5))
      // 假设传参的个数不固定 有多个 此时用ES6语法会更容易
      const add = (...args) => {
        // args匹配到所有的参数,是数组类型
        let result = 0
        for (let i = 0; i < args.length; i++) {
          result += args[i]
        }
        return result
      }
      console.log(add(1, 2, 4))
      
  • 数组相关
    • 展开运算符 ...
      // 之前的写法
      const arr = [1, 10, 4, 50, 60]
      const max1 = Math.max(1, 10, 4, 50)
      console.log(max1) // 50
      // ES6写法
      const max2 = Math.max(...arr)
      console.log(max) // 50
      // 拼接数组
      const arr1 = [1, 2]
      const arr2 = [3, 4]
      const arr3 = [...arr1, ...arr2]
      console.log(arr3) // [1, 2, 3, 4]
      // 对象的合并
      const obj1 = { name: 'tom' }
      const obj2 = {
        age: 10,
        gender: '女',
        ...obj1 // 把obj1的属性合并到obj2中
      }
      console.log(obj2) // {age: 10, gender: "女", name: "tom"}
      
    • Array.from() 把伪数组转成数组
      // 伪数组
      const arrObj = {
      	0: 'tom',
      	1: 'tony',
      	2: 'lucy',
      	length: 3
      }
      // 将上述伪数组转成真数组
      const arr = Array.from(arrObj)
      console.log(arr) // ['tom', 'tony', 'lucy']
      // 1.length决定数组的长度
      // 2.如果伪数组中数据不够length定义的长度,剩余的显示undefined
      
    • forEach() 遍历函数
      const arr = [{name:'tom',agr:20},{name:'lucy',agr:23},{name:'nick',agr:25}]
      // item是每次遍历对应的数据选项
      // i 是每次对应的索引
      arr.forEach((item,i)=>{
      	console.log(item,i)
      })
      
    • find() 查找数组中符合条件的选项
      const arr = [{name:'tom',agr:20},{name:'lucy',agr:23},{name:'nick',agr:25}]
      const item = arr.find(item => {
      	// 也会遍历数组
      	// 回调函数的返回值如果为真,终止循环,find函数会返回当前遍历的这项数据
      	return item.name === 'nick'
      })
      console.log(item)
      
    • findIndex() 查找数组中符合条件的第一个选项的索引
      const arr = [{name:'tom',agr:20},{name:'lucy',agr:23},{name:'nick',agr:25}]
      const i = arr.findIndex(item => {
      	// 也会遍历数组
      	// 回调函数的返回值如果为真,终止循环,find函数会返回当前遍历的这项数据
        return item.name === 'tom'
      })
      console.log(i)
      
  • 字符串相关
    • 模板字符串 (字符串拼接更方便;支持换行)
      const name = 'tony'
      const age = 20
      const str = name + '今年' + age + '岁'
      console.log(str)
      // 模板字符串写法
      const str1 = `${name}今年${age}`
      console.log(str1)
      const html = '<div><p>名字:Lucy</p><p>年龄:28</p></div>'
      const html1 = `
      	<div>
        		<p>名字:Lucy</p>;
            	<p>年龄:28</p>;
        	</div>
      `
      
    • 字符串扩展API
      • includes() 判断当前字符串是否包含某段字符串
      • startsWith() 判断是否以某一段字符串开头
      • endWith() 判断是否以某一段字符串结尾
      • repeat() 重复拼接同一段字符串
      • padStart() 补齐字符串长度,不够使用某一个字符串进行补全,往前补
      • padEnd() 补齐字符串长度,不够使用某一个字符串进行补全,往后补
      const str = 'Hi es6'
      // 判断是否包含 es 字符串      
      console.log(str.includes('es')); // true
      console.log(str.includes('es1')); // false
      // 判断是否以 Hi 字符串开头     
      console.log(str.startsWith('Hi')); // true
      console.log(str.startsWith('hi')); //false
      // 判断是否以 s6 字符串结尾   
      console.log(str.endsWith('s6')); // true
      console.log(str.endsWith('S6')); // false
      // 重复拼接3次 Hi es6 字符串   重复拼接同一段字符串
      console.log(str.repeat(3)); // Hi es6Hi es6Hi es6
      const str2 = '1'
      // 往 1 之前补 0 , 补齐之后一共6位    
      console.log(str2.padStart(6, '0'));
      // 往 1 之后补 0 , 补齐之后一共6位     
      console.log(str2.padEnd(6, '0'));
      
  • Number相关
    • 以前学的转换数字函数
      • parseInt() 转成整数
      • parseFloat() 转换成浮点数(小数)
    • ES6中的转换数字函数
      • Number.parseInt()
      • Number.parseFloat()
  • ES6集合-Set
    • Set是一个集合,和Array类似,数组的值可以重复,而Set的值不可重复。Set用于数组去重
    • 在js环境中,提供了Set的构造函数,就是创建一个Set集合:newSet()
    • 集合的值不能重复
      // 创建Set集合
      const set = new Set()
      // Set添加数据使用add()函数
      set.add(1)
      set.add(2)
      set.add(3)
      // 添加一个重复的数据,添加无效
      set.add(2)
      console.log(set)
      
    • Set数组去重
      const arr = [1, 2, 2, 3, 5, 4, 5]
      // 将数组转换成set, new Set(数组) 得到一个Set集合
      const set = new Set(arr)
      console.log(set)
      // 将set转换成数组
      // 方式1:
      const arr2 = Array.from(set)
      console.log(arr2)
      // 方式2:
      const arr3 = [...set]
      console.log(arr3)
      
  • ES6语法兼容
    • 总结:ES6提升了语法和API两个方面
    • 采用banel工具使用ES6语法降级到ES5语法,从而去兼容更多的浏览器
    • 官网地址: https://babeljs.io/
    • 工具作用:Babel is a JavaScript compiler. (babel是一个js编译器)
      • 将ES6语法转换成ES5语法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/899247.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Nuvoton干货分享】开发应用篇 5 -- 32bit MCU Flash 操作

在实际开发中&#xff0c;我们都会碰到需要把部分数据存放在不易失存储空间上&#xff0c;比如外部NOR FLASH、EEPROM、SD等存储空间上&#xff0c;针对数据量不大的情况下&#xff0c;可以考虑将数据存放在芯片ROM存储空间。Nuvoton 32bit MCU ROM存储空间包括LDROM、APROM、S…

什么是缓存?

缓存是将文件副本存储在临时位置的过程&#xff0c;以便可以更快地访问这些文件。从技术上讲&#xff0c;缓存是文件或数据副本的任何临时存储位置&#xff0c;但通常是指互联网技术中的缓存。Web 浏览器缓存 HTML 文件、JavaScript 和图像&#xff0c;以便更快地加载网站&…

python 爬虫抓取百度热搜

实现思路&#xff1a; 第1步、在百度热搜页获取热搜元素 元素类名为category-wrap_iQLoo 即我们只需要获取类名category-wrap_为前缀的元素 第2步、编写python脚本实现爬虫 import requests from bs4 import BeautifulSoupurl https://top.baidu.com/board?tabrealtime he…

npm run serve 提示异常Cannot read property ‘upgrade‘ of undefined

npm run serve 提示Cannot read property ‘upgrade’ of undefined 一般是proxy的target代理域名问题导致的&#xff0c;如下&#xff1a; 解决方案&#xff1a; proxy: { “/remoteDealerReportApi”: { target: ‘http://demo-.com.cn’, //此域名有问题&#xff0c;会导致…

阿里云项目启动OOM问题解决

#1024程序员节&#xff5c;征文# 问题描述 随着项目业务的增长&#xff0c;系统启动时内存紧张&#xff0c;每次第一次启动的时候就会出现oom第二次或者第n的时候&#xff0c;就启动成功了。 带着这个疑问&#xff0c;我就在阿里云上提交了工单&#xff0c;咨询为什么第一次…

WIFI、NBIOT、4G模块调试AT指令连接华为云物联网服务器(MQTT协议)

一、前言 随着物联网&#xff08;IoT&#xff09;技术的飞速发展&#xff0c;越来越多的设备开始连接到互联网&#xff0c;形成了一个万物互联的世界。在这个背景下&#xff0c;设备与云端之间的通讯变得尤为重要。 本文将探讨几种常见的无线通信模块——EC20-4G、Air724ug-4…

CTFHUB技能树之文件上传——MIME绕过

开启靶场&#xff0c;打开链接&#xff1a; 直接指明是MIME验证 新建04MIME.php文件&#xff0c;内容如下&#xff1a; <?php echo "Ciallo&#xff5e;(∠・ω< )⌒★";eval($_POST[pass]);?> &#xff08;这里加了点表情&#xff0c;加带点私货&#x…

传感器驱动系列之PAW3212DB鼠标光电传感器

目录 一、PAW3212DB鼠标光电传感器简介 1.1 主要特点 1.2 引脚定义 1.3 传感器组装 1.4 应用场景 1.5 传感器使用注意 1.5.1 供电选择 1.5.2 SPI读写设置 1.5.3 MOTION引脚 1.6 寄存器说明 1.6.1 Product_ID1寄存器 1.6.2 MOTION_Status寄存器 1.6.3 Delta_X寄存器…

GRU神经网络理解

全文参考以下B站视频及《神经网络与深度学习》邱锡鹏&#xff0c;侧重对GPU模型的理解&#xff0c;初学者入门自用记录&#xff0c;有问题请指正【重温经典】GRU循环神经网络 —— LSTM的轻量级版本&#xff0c;大白话讲解_哔哩哔哩_bilibili 更新门、重置门、学习与输出 注&a…

Go通过gorm连接sqlserver报错TLS Handshake failed

Go通过gorm连接sqlserver报错TLS Handshake failed [error] failed to initialize database, got error TLS Handshake failed: tls: server selected unsupported protocol version 301 panic: TLS Handshake failed: tls: server selected unsupported protocol version 301 …

综合小程序的设计

熟悉python可视化的设计 完成综合小程序的设计。 登录系统设计 from tkinter import * import tkinter.messagebox def onClick(): namebname.get() pwdbpwd.getO() if (namezhou and pwd123): tkinter.messagebox.showinfo(title提示,message登陆成功&a…

Linux 中 .bash_history、.bash_logout 等用户配置文件

目录 前言.bash_history.bash_logout.bash_profile.bashrc.cshrc.tcshrc.viminfo 总结 前言 在 Linux 中我们经常会看见用户家目录下存在 .bash_history、.bash_logout、.bash_profile、.bashrc、.cshrc、.tcshrc、.viminfo 这写文件&#xff0c;那它们区别是什么呢&#xff1…

2024软考网络工程师笔记 - 第8章.网络安全

文章目录 网络安全基础1️⃣网络安全威胁类型2️⃣网络攻击类型3️⃣安全目标与技术 &#x1f551;现代加密技术1️⃣私钥密码/对称密码体制2️⃣对称加密算法总结3️⃣公钥密码/非对称密码4️⃣混合密码5️⃣国产加密算法 - SM 系列6️⃣认证7️⃣基于公钥的认证 &#x1f552…

Unity CRP学习笔记(一)

Unity CRP学习笔记&#xff08;一&#xff09; 主要参考&#xff1a; https://catlikecoding.com/unity/tutorials/custom-srp/ https://docs.unity.cn/cn/2022.3/ScriptReference/index.html 中文教程部分参考&#xff08;可选&#xff09;&#xff1a; https://tuncle.blog/c…

算力的定义、单位、影响因素、提升方法、分类、应用等。附超算排名

文章目录 算力的定义算力的单位FLOPS&#xff08;Floating Point Operations Per Second&#xff0c;浮点运算次数/秒&#xff09;IPS&#xff08;Instructions Per Second&#xff0c;指令/秒&#xff09;TOPS&#xff08;Trillion Operations Per Second&#xff0c;万亿次/秒…

Win10系统安装docker操作步骤

Docker下载 docker下载地址&#xff1a;Docker: Accelerated Container Application Development 打开网页后&#xff0c;点击图下所示&#xff0c;下载windows版本的docker 启用Hyper-V 和容器特性 右键左下角windows图标&#xff0c;选择应用和功能 然后在下面的界面中&am…

【Nuvoton干货分享】开发应用篇 4 -- 8bit MCU Flash 操作

我们在进行实际开发设计中&#xff0c;难免需要进行数据存储&#xff0c;早期很多都是外接EEPROM来进行设计&#xff0c;但是需要增加成本。其实芯片内部的Flash也是可以当成数据存储空间的。本章节主要介绍新唐的8位机如何进行常量数据的存储操作。 一、存储空间划分 我这边…

w~自动驾驶合集6

我自己的原文哦~ https://blog.51cto.com/whaosoft/12286744 #自动驾驶的技术发展路线 端到端自动驾驶 Recent Advancements in End-to-End Autonomous Driving using Deep Learning: A SurveyEnd-to-end Autonomous Driving: Challenges and Frontiers 在线高精地图 HDMa…

小程序无法获取头像昵称以及手机号码

用户在使用小程序的时候&#xff0c;登录弹出获取昵称头像或者个人中心点击默认头像弹窗获取头像昵称的时候&#xff0c;点击弹窗中的头像昵称均无反应&#xff0c; 这个是因为你的小程序隐私政策没有更新&#xff0c;或者老版本没有弹窗让用户同意导致的 解决办法&#xff1…

利用彩色相机给激光点云染色

文章目录 概述核心代码效果概述 在激光SLAM(Simultaneous Localization and Mapping)中,使用彩色相机为激光点云染色是一个常见的做法。这种技术结合了激光雷达的高精度距离测量和相机的丰富色彩信息,使得生成的点云不仅包含空间位置信息,还包含颜色信息,从而更直观和细…