【前端】--- ES6上篇(带你深入了解ES6语法)

news2024/9/20 18:23:50

前言:ECMAScript是 JavaScript 的标准化版本,由 ECMA 国际组织制定。ECMAScript 定义了 JavaScript 的语法、类型、语句、关键字、保留字等。

ES6 是 ECMAScript 的第个版本,于 2015 年发布,引入了许多重要的新特性,使 JavaScript 更加现代化。

目录

变量声明: 

let声明: 

var声明:

const声明:

解构(数组,对象,字符串):

数组解构:

对象解构:

字符串解构:

对象扩展:

数组扩展:

 字符串扩展:


变量声明: 

作用域有块作用域,函数作用域,全局作用域,其中全局作用域>函数作用域>块作用域

let和var的区别  (ES6使用let更加严谨): 

let声明: 

使用 let 声明的变量仅在其定义的块(用 { } 包围的代码块)内有效。这意味着变量在块外不可访问。

{
    let x = 10;
    console.log(x); // 输出 10
}
console.log(x); // ReferenceError: x is not defined
var声明:

使用 var 声明的变量的作用范围是整个函数体。如果在函数外部声明,变量将是全局的。

function myFunction() {
    var x = 10; // 函数作用域
    console.log(x); // 输出 10
}
myFunction();
console.log(x); // ReferenceError: x is not defined
const声明:

     const:声明常量的 特点和语法 与let相同的。能改变的是变量,常量不能够改变

      1.常量不允许修改值。

      2.常量必须赋初始值。

      3.const与let相同 同样有块作用域(没有预解析,变量提升

      4.const定义的引用类型值内容可以修改。

   const PI = 3.1415926;
   // PI=3.14; //报错,1.常量不允许修改值
   // const numA; //2.常量必须赋初始值。
   // numA= 10;

   const obj = { a: 1 };
   console.log(obj);
   obj.a = 20; // 不报错,没有修改到内存地址
   obj = { b: 1 };// 报错,修改内存地址了。console.log(obj);
   //如果存储的是一个数值,存的就是一个值
   //如果存储的是一个对象,存的就是一个内存地址

解构(数组,对象,字符串):

数组解构:

    解构: 左边一种结构,右边一种结构,左右一一对应

    1.完全解构

    2.不完全解构(部分解构)

    3.忽略方式解构

    4.嵌套解构

    5.剩余运算符方式解构Ig

    6.解构默认值

    7.使用场景

    场景1:使用解构方式实现两数交换

    场景2:使用函数返回值

 1.完全解构:

      //1.完全解构
      let a, b;
      [a, b] = [1, 2];
      console.log(a, b);

 2.不完全解构(部分解构)

      //2.不完全解构(部分解构)
      let [a] = [1, 2, 3];
      console.log(a);
      let [b, c] = [1];
      console.log(b, c);//如果解构不成功,变量值就默认等于undefined

  3.忽略方式解构

      //3.忽略方式解构
      let [, , a] = [1, 2, 3];
      console.log(a);

4.嵌套解构

      //4.嵌套解构
      let [a, b, [c]] = ["a", "b", ["c"]];
      console.log(a, b, c);

5.剩余运算符方式解构

      //5,剩余运算符方式解构
      let [a, ...b] = [1, 2, 3, 4, 5, 6, 7];
      console.log(a, b);//a只取第一个,剩下的都赋值给b

6.解构默认值

      //6.解构默认值
      let [a, b = 100] = [90];
      console.log(a, b);//如果设置了默认值,当没有第二个参数值时就取默认值180

场景1:使用解构方式实现两数交换

      let a = 10;
      b = 20;
      [a, b] = [b, a];
      console.log(a, b);

场景2:使用函数返回值

      //使用场景二:使用函数返回值
      function fu() {
        return [1, 2, 3]
      }
      let res = fu()
      console.log(res[0], res[1], res[2])

      let [a, b, c] = fu()
      console.log(a, b, c)
对象解构:

    数组解构和对象解构的不同:

    数组解构是按照顺序一一解构

    对象解构与顺序无关,根据属性名和变量名进行比较

    1.完全解构

    2. 部分解构

    3.解构之后重命名

    4.剩余运算符对象解构 - 浅指贝

    5。对象默认值

    6.使用场景: 场景1: 函数返回值

    1.完全解构

      //1.完全解构
      let obj = {
        name: 'zhangsna',
        age: 20
      }
      let { age, name } = obj;
      console.log(name, age);

    2. 部分解构

      //2.部分解构
      let obj = { name: 'zhangsan', age: 20 };
      let { age } = obj;
      console.log(age);
      let { address, name } = obj;
      console.l0g(address, name);//如果没有匹配到则变量undefined

    3.解构之后重命名

      //3.解构之后重命名(匹配的属性名:变最名
      let obj = { name: 'zhangsan', age: 20 };
      let { name: myname, age: myage } = obj;
      console.log(myname, myage);

    4.剩余运算符对象解构 - 浅指贝

      //4。剩余运算符对象解构-浅拷贝...
      let obj = { name: 'zhangsan', age: 20, address: '大河区' };
      let { name, ...rest } = obj;
      console.log(name, rest);

    5.对象默认值

      //5。对象默认值
      let obj = { name: 'zhangsan', age: 20, address: '天河区' };
      let { name, img = 'aaa.png' } = obj;
      console.log(name, img);

    6.使用场景: 场景1: 函数返回值

      //场景1:函数返回值
      function fn() {
        return {
          name: 'zhangsan', age: 20, address: '天河区'
        }
      }
      let res = fn();//之前不解构方式
      console.log(res.name, res.age, res.address);//解构方式
      let { name, age, address } = res;
      console.log(name, agP, address);
字符串解构:

字符串解构很简单,就是将字符解构出来赋给变量

    let str = 'ababa'
    let [a, b, c, d] = str
    console.log(a, b, c, d) //a b a b

    let { length } = str
    console.log(length)//5

对象扩展:

    对象扩展

    1.属性和方法的简洁表达方式

    2.属性如果对象属性名和接收的变量名相同可以直接用变量名作为性名方法 方法名(){)

    3.0bject.assign()用于对象合井

    4.0bject.is()方法 比较两个值是否严格相等

    5.遍历对象的方法(键,值,键值对) 以及将对像转为map对象的方法

1.属性和方法的简洁表达方式,键值对的命名和方法的命名

const name = "xiaoming";
      let vue = {
        name,//等同于name:xiaoming
        data() {
          console.log("我是data-fn")
        }
        //等同于
        // data:function(){
        //   console.log("我是data-fn"))
        // }
      }

2.动态属性名:在对象字面量中,使用方括号 [ ] 语法可以动态地计算属性名。这意味着你可以通过表达式来生成属性名。动态方法名:在对象字面量中,方法名同样可以使用动态计算的方式。

//2.表达式方式的属性名和方法名
      let obj = {
        ['my' + 'name']: 'zhangsan',
        ["say" + "Hi"]() {
          console.log("sayHi...")
        }
      }

      let nameobj = {}
      console.log(obj);
      obj.sayHi();
      //后面写项目时,对象的属性可能是动态添加进去。并需要动态获取出来let nameobj{};
      let arr = ["zhangsan", "lisi", "wangwu"];
      //{"zhangsan1":"zhangsan","lisi2":"lisi"}
      for (let i = 0; i < arr.length; i++) {
        console.log(arr[i]);
        nameobj[arr[i] + (i + 1)] = arr[i];
      }
      console.log(nameobj);
      // lisi2: "lisi"
      // wangwu3: "wangwu"
      // zhangsan1: "zhangsan"

      for (let i = 0; i < arr.length; i++) {
        console.log(nameobj[arr[i] + (i + 1)])
        // zhangsan
        // lisi
        // wangwu
      };

  3.0bject.assign()用于对象合井

    //1.0bect.assign()用于对象合并
    //注意点:如果不希望更改源对象,第一个参数可以给一个}
    //合井时如果存在相同属性,后面对象的会覆盖前面对象属性值
    let a = { name: 'zhangsan', width: 100 };
    let b = { age: 20, width: 200 };
    let ret = Object.assign({}, a, b);
    console.log(ret);
    console.log(a, b);

 4.0bject.is()方法 比较两个值是否严格相等

    //2.0bject.is()方法   比较两个值是否严格相等
    console.log(1 == 1);//true
    console.l0g("1" == 1);//true
    console.log("1" === 1);//false

    console.log(object.is(1, 1)); //true
    console.log(object.is("1", 1));//false
    console.log(Object.is({}, {}))//false

 5.遍历对象的方法(键,值,键值对) 以及将对像转为map对象的方法

    let obj = {
      name: '11',
      age: 22
    }

    //遍历值
    console.log(Object.values(obj))
    //遍历键值对
    console.log(Object.entries(obj))
    //遍历键
    console.log(Object.keys(obj))

    //将对象转换成map
    let map = new Map(Object.entries(obj))
    console.log(map)

数组扩展:

    1.扩展运算符...

    解构。数组合并

    2.find(callback) 查找,找出第一个符合条件的数组成员

    3.findIndex(callback)

    4.Array.of()

    5.Array.from(obj)将对象转换为真正的数组

    6.数组includes()方法

    7.at()方法通过下标访问数组

    1.扩展运算符...      解构。数组合并

      //1。扩展运算符...
      let arr1 = ["a", "b", "c"]
      // let arr2 = arr1.concat();
      let arr2 = [...arrl]
      arr1.push("d")
      console.log(arr1, arr2);

      let arr3 = ["x", "y", "z"];
      let arr4 = [...arr1, ...arr3];
      console.log(arr4);

    2.find(callback) 查找,找出第一个符合条件的数组成员

      // 2.find(callback) 查找,找出第一个符合条件的数组成员
      let arr1 = [1, 2, 3, 4, 5, 6];
      let result = arrl.find(function (item) {
        return item > 3; 1
      })
      console.log("result", result);

    3.findIndex(callback)

      //3.findIndex(callback)查找。找出第一个符合条件的数组成员对应的索引
      let arr1 = [1, 2, 3, 4, 5, 6];
      let result = arr1.findIndex(function (item) {
        return item > 3;
      })
      console.log("result2", result);

    4.Array.of()

      //4.Array.of()将一组值转换为数组 (了解)
      console.log(Array.of(1, 2, 3))
      console.log(Array.of(99))

      let arr = Array(5)
      console.log(arr);//[empty]*5

    5.Array.from(obj)将对象转换为真正的数组

      //5.Array.from(obj[,fn])将对象转换成真正的数组
      //获取到的dom对象集合并不是真正数组
      //arguments 也不是真正数组
      //转换条件:需要是可遍历的对象,需要有索引以及length属性
      function fn() {
        console.log("arguments:", arguments);
        //arguments.forEach(function()())//报供arguments.forEach is not a function
        Array.from(arguments).forEach(function (item) {
          console.log(item);
        })
      }
      fn("zhangsan", "lisi")
      console.log(["zhangsan"])
      let obj = { 0: "zhangsan", 1: "lisi", length: 2 }
      console.log(Array.from(obj));

  6.数组includes()方法 

    //数组的includes方法
    let arr = [1, 2, 34, 5, 33]
    console.log(arr.includes(33))

 7.at()方法通过下标访问数组

    let arr = [12, 3, 3, 2, 56, 5]

    //正数  与之前数组访问下标相同
    //负数  从后往前进行查找
    console.log(arr.at(1))
    console.log(arr.at(-1))//5

 字符串扩展:

    字符串新增的方法

    1.includes()  判断是否包含 返回true /false

    2.startswith() 判断字符串是否是在原字符串的头部 返回true / false

     3.endsWith()判断字符串是否是在原字符串的结尾返回true  / false

    4.repeat() 将字符串重复n次 返回重复后的新字符事

    5.padStart() padEnd() 字符串填充

    6.字符替换 replace() 和 replaceAll()

    7.优化代码的兼容性所以将trimleft()更新了trimstart() trimright()更新了trimend()

 

    1.includes()  判断是否包含 返回true /false

      let str = "hello world"
      console.log(str.includes(h));//true
      console.log(str.includes(yy));//false

    2.startswith() 判断字符串是否是在原字符串的头部 返回true / false

      let str = "hello world"
      console.log(str.startsWith(h));//true
      console.log(str.startswith(e));//false

     3.endsWith()判断字符串是否是在原字符串的结尾返回true  / false

      let str = "hello world"
      console.log(str.endsWith('world'));//true
      console.log(str.endsWith('hello'));//false

    4.repeat() 将字符串重复n次 返回重复后的新字符事

      let str = "hello world"
      console.log(str.repeat(3));//hello worldhello worldhello world

5.padStart() padEnd() 字符串填充

      let str = 'addsfsaf'
      //str.padstart(目标长度,[,填充字符串])
      let s = str.padStart(10)
      let s1 = str.padStart(10, '2')

      console.log(s1)  //22addsfsaf

      let str = 'addsfsaf'
      //str.padstart(目标长度,[,填充字符串])
      let s = str.padEnd(10)
      let s1 = str.padEnd(10, '2')

      console.log(s1) //addsfsaf22

6.字符替换 replace() 和 replaceAll()

      //替换所有
      let s = "aflsdjflsefel"
      console.log(s.replaceAll('s', 'a'))
      //替换第一个
      let s = "aflsdjflsefel"
      console.log(s.replace('s', 'a'))

到这里就结束了,感谢大家的观看╮( ̄▽ ̄")╭

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YOLOv5白皮书-第Y1周:调用官方权重进行检测

>- **&#x1f368; 本文为[&#x1f517;365天深度学习训练营](小团体&#xff5e;第八波) 中的学习记录博客** >- **&#x1f356; 原作者&#xff1a;[K同学啊](K同学啊-CSDN博客)** 一、前言 拖了好久&#xff0c;终于要开始目标检测系列了。自己想过好几次&#xf…

【Python机器学习】NLP信息提取——值得提取的信息

目录 提取GPS信息 提取日期 如下一些关键的定量信息值得“手写”正则表达式&#xff1a; GPS位置&#xff1b;日期&#xff1b;价格&#xff1b;数字。 和上述可以通过正则表达式轻松捕获的信息相比&#xff0c;其他一些重要的自然语言信息需要更复杂的模式&#xff1a; 问…

Linux入门学习:Linux调试器gdb使用

1. 背景 程序的发布方式有两种&#xff0c;debug模式和release模式&#xff0c;debug是添加调试信息&#xff0c;release是取消调试信息&#xff0c; Linux gcc/g出来的二进制程序&#xff0c;默认是release模式&#xff0c;要使用gdb调试&#xff0c;必须在源代码生成二进制程…

html+css+js网页设计 旅游 穷游10个页面

htmlcssjs网页设计 旅游 穷游10个页面 网页作品代码简单&#xff0c;可使用任意HTML辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获取源码 1&#xff…

SpringCloud微服务消息驱动的实践指南

Spring Cloud是一个用于构建分布式系统的开发工具&#xff0c;通过它可以快速搭建基于微服务架构的应用&#xff0c;并提供了丰富的功能和解决方案。在Spring Cloud中&#xff0c;消息驱动是一种常见的通信模式&#xff0c;通过消息传递来实现不同微服务之间的数据交互。本文将…

文件上传js代码

大家好&#xff0c;很久没更新了&#xff0c;今天空了&#xff0c;记录一下文件上传js代码。(自己搭建的网站&#xff0c;演示学习一下这种漏洞&#xff0c;不要做违法的事情&#xff01;&#xff01;&#xff01;) 一般文件上传的话都是奔着getshell去的&#xff0c;但是一般…

【Linux 20】线程控制

文章目录 &#x1f308; 一、创建线程⭐ 1. 线程创建函数⭐ 2. 创建单线程⭐ 3. 给线程传参⭐ 4. 创建多线程⭐ 5. 获取线程 ID &#x1f308; 二、终止线程⭐1. 使用 return 终止线程⭐ 2. 使用 pthread_exit 函数终止线程⭐ 3. 使用 pthread_cancel 函数终止线程 &#x1f30…

Python中lambda表达式的使用——完整通透版

文章目录 一、前言二、 基本语法三、举个简单的例子&#xff1a;四、常见应用场景1. 用于排序函数sort() 方法简介lambda 表达式的作用详细解释进一步扩展总结 2、与 map、filter、reduce 等函数结合1、 map() 函数示例&#xff1a;将列表中的每个数字平方 2、 filter() 函数示…

Centos 7 搭建Samba

笔记&#xff1a; 环境&#xff1a;VMware Centos 7&#xff08;网络请选择桥接模式&#xff0c;不要用NAT&#xff09; 遇到一个问题就是yum 安装404&#xff0c;解决办法在下面&#xff08;没有遇到可以无视这句话&#xff09; # 安装Samba软件 yum -y install samba# 创建…

Shader Graph Create Node---Channel

二、Channel 1、Combine(合并通道) 2、Flip(翻转) 3、Split(分离) 4、Swizzle(交换)

ELK环境部署

目录 环境准备 Elasticsearch 部署 安装Elasticsearch Elasticsearch-head 插件 安装node 安装 phantomjs 安装 Elasticsearch-head Logstash 安装部署 Kibana 安装部署 ELFK 本章纯搭建过程&#xff0c;几乎无任何注释解释 环境准备 ELK的搭建和测试&#xff0c;…

力扣(LeetCode)每日一题 2576. 求出最多标记下标

题目链接https://leetcode.cn/problems/find-the-maximum-number-of-marked-indices/description/?envTypedaily-question&envId2024-09-12 思路&#xff1a; 先排序&#xff0c;然后定义双指针 left&#xff0c;right&#xff0c;贪心遍历&#xff0c;左指针在中间&…

机器狗与无人机空地协调技术分析

随着科技的飞速发展&#xff0c;机器狗与无人机作为智能机器人领域的杰出代表&#xff0c;正逐步在军事侦察、灾害救援、环境监测、农业植保等多个领域展现出巨大的应用潜力。本文旨在深入探讨机器狗与无人机之间的空地协调技术&#xff0c;分析其在复杂环境中的协同作业机制、…

轻松打造:用Python实现手机与电脑间的简易消息系统

展示&#x1f3a5; 观看视频&#xff1a;&#x1f440;&#xff0c;这是之前完成的一个项目&#xff0c;但今天我们的重点不是这个哦。 告别往昔&#xff0c;启航新篇章 现象&#x1f31f; 智能互动&#xff1a;&#x1f4f1; 我们每天都在享受与智能设备的互动&#xff0c;…

作为HR,如何考察候选人的沟通能力

如何考察候选人的沟通能力。沟通能力&#xff0c;这个听起来简单&#xff0c;实际上却是一个非常复杂的技能&#xff0c;它关乎到一个人能否有效地传递信息&#xff0c;理解他人&#xff0c;并且在团队中发挥积极的作用。 作为HR&#xff0c;我们应该怎样才能精准地把握住候选…

鸿蒙开发(HarmonyOS)组件化浅谈

众所周知&#xff0c;现在组件化在移动开发中是很常见的&#xff0c;那么组件化有哪些好处&#xff1a; 1. 提高代码复用性&#xff1a;组件化允许将应用程序的不同功能模块化&#xff0c;使得这些模块可以在不同的项目中重复使用&#xff0c;从而提高开发效率并减少重复工作。…

JAVA并发编程系列(9)CyclicBarrier循环屏障原理分析

拼多多2面&#xff0c;还是模拟拼团&#xff0c;要求用户拼团成功后&#xff0c;提交订单支付金额。 之前我们在系列(8)《CountDownLatch核心原理》&#xff0c;实现过拼团场景。但是CountDownLatch里调用countDown()方法后&#xff0c;线程还是可以继续执行后面的代码&#xf…

【云安全】云上资产发现与信息收集

一、云基础设施组件 1、定义 在云计算基础架构中&#xff0c;基础设施组件通常包括&#xff1a;计算、存储、网络和安全等方面的资源。例如&#xff0c;计算资源可以是虚拟机、容器或无服务器计算引擎&#xff1b;存储资源可以是对象存储或块存储&#xff1b;网络资源可以是虚拟…

数字电路与逻辑设计-计数器逻辑功能测试

一&#xff0e;实验目的 1&#xff0e;验证用触发器构成的计数器计数原理&#xff1b; 2&#xff0e;掌握测试中规模集成计数器功能的方法&#xff1b; 二&#xff0e;实验原理 时序逻辑电路中&#xff0c;有一种电路称为计数器&#xff0c;计数器是用来对时钟脉冲进行计数的…

稳联Profinet转Canopen网关携手伺服,高效提升生产效率

在当今的工业生产领域&#xff0c;追求高效、精准和可靠的生产方式是企业不断努力的方向。稳联技术Profinet转Canopen&#xff08;WL-ABC3033&#xff09;网关与伺服系统的携手合作&#xff0c;为提高生产效率带来了新的机遇和突破。 实现无缝通信&#xff0c;优化生产流程稳联…