ES6 | (一)ES6 新特性(上) | 尚硅谷Web前端ES6教程

文章目录

  • 📚ES6新特性
  • 📚let关键字
  • 📚const关键字
  • 📚变量的解构赋值
  • 📚模板字符串
  • 📚简化对象写法
  • 📚箭头函数
  • 📚函数参数默认值设定
  • 📚rest参数
  • 📚spread扩展运算符
  • 📚Symbol
    • 🐇Symbol基本介绍与使用
    • 🐇对象添加Symbol类型的属性
    • 🐇Symbol内置值

学习链接:尚硅谷Web前端ES6教程

在这里插入图片描述

📚ES6新特性

📚let关键字

  • let关键字用来声明变量,使用let声明的变量有几个特点:
    • 变量不允许重复声明。
    • 块级作用域。
    • 不存在变量提升
    • 不影响作用域链
  • 应用场景:以后声明变量使用let 就对了。

📚const关键字

  • const关键字用来声明常量,const声明有以下特点:
    • 声明必须赋初始值
    • 标识符一般为大写。
    • 不允许重复声明。
    • 值不允许修改。
    • 块级作用域。
  • 注意:对象属性修改和数组元素变化不会触发const 错误
  • 应用场景:声明对象类型使用const,非对象类型声明选择let

📚变量的解构赋值

  • ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构赋值
  • 应用场景:频繁使用对象方法、数组元素,就可以使用解构赋值形式。
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>变量的解构赋值</title>
    </head>
    <body>
        <script>
            // 1. 数组的结构
            const F4 = ['小沈阳','刘能','赵四','宋小宝'];
            let [xiao, liu, zhao, song] = F4;
            console.log(xiao);
            console.log(liu);
            console.log(zhao);
            console.log(song);
    
            // 2. 对象的解构
            const zhaobenshan = {
                name: '赵本山',
                age: '不详',
                xiaopin: function(){
                    console.log("我可以演小品");
                }
            };
    
            let {name, age, xiaopin} = zhaobenshan;
            console.log(name);
            console.log(age);
            console.log(xiaopin);
            xiaopin();
        </script>
    </body>
    
    </html>
    
    在这里插入图片描述

📚模板字符串

  • 模板字符串(template string)是增强版的字符串,用反引号`标识,特点:
    • 字符串中可以出现换行符
    • 可以使用 ${xxx} 形式输出变量
  • 应用场景:当遇到字符串与变量拼接的情况使用模板字符串。
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>模板字符串</title>
    </head>
    <body>
        <script>
            //1. 声明
            let str = `我也是一个字符串哦!`;
            console.log(str, typeof str);
    
            //2. 内容中可以直接出现换行符
            let str1 = `<ul>
                        <li>沈腾</li>
                        <li>马丽</li>
                        <li>魏翔</li>
                        <li>艾伦</li>
                        </ul>`;
            console.log(str1, typeof str1)
            //3. 变量拼接
            let lovest = '沈腾';
            let out = `${lovest}是我心目中最搞笑的演员!!`;
            console.log(out);
        </script>
    </body>
    </html>
    
    在这里插入图片描述

📚简化对象写法

  • ES6 允许在大括号里面,直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。
  • 应用场景:对象简写形式简化了代码,所以以后用简写就对了。
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>简化对象写法</title>
    </head>
    <body>
        <script>
            let name = '尚硅谷';
            let change = function(){
                console.log('我们可以改变你!!');
            }
    
            const school = {
                name,
                change,
                improve(){
                    console.log("我们可以提高你的技能");
                }
            }
            console.log(school);
        </script>
    </body>
    </html>
    

在这里插入图片描述

📚箭头函数

  • ES6 允许使用「箭头」=>定义函数。
  • function写法:
    function fn(param1, param2,, paramN) { 
        // 函数体
        return expression; 
    }
    
  • =>写法:
    let fn = (param1, param2,, paramN) => {
        // 函数体
        return expression;
    }
    
  • 箭头函数的注意点:
    • 如果形参只有一个,则小括号可以省略。
    • 函数体如果只有一条语句,则花括号可以省略,函数的返回值为该条语句的执行结果。
    • 箭头函数this始终指向声明时所在作用域下this的值。
    • 箭头函数不能作为构造函数实例化。
    • 不能使用 arguments。
  • 注意:箭头函数不会更改this指向,用来指定回调函数会非常合适。
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>箭头函数</title>
    </head>
    
    <body>
        <script>
            //声明一个函数
            let fn = (a,b) => {
                return a + b;
            }
            //调用函数
            let result = fn(1, 2);
            console.log(result);
    
            //1. this 是静态的. this 始终指向函数声明时所在作用域下的 this 的值
            function getName(){
                console.log(this.name);
            }
            let getName2 = () => {
                console.log(this.name);
            }
    
            //设置 window 对象的 name 属性
            window.name = '尚硅谷';
            const school = {
                name: "ATGUIGU"
            }
    
            //直接调用
            getName();
            getName2();
    
            //call 方法调用
            getName.call(school);
            getName2.call(school);
    
            //箭头函数的简写
            //1) 省略小括号, 当形参有且只有一个的时候
            //2) 省略花括号, 当代码体只有一条语句的时候, 此时 return 必须省略
            // 而且语句的执行结果就是函数的返回值
            let pow = n => n * n;       
            console.log(pow(8));
    
            //2. 不能作为构造实例化对象
            let Person = (name, age) => {
                this.name = name;
                this.age = age;
            }
            let me = new Person('xiao',30);
            console.log(me);
    
            //3. 不能使用 arguments 变量
            let fn1 = () => {
                console.log(arguments);
            }
            fn1(1,2,3);
        </script>
    </body>
    </html>
    
    在这里插入图片描述
    在这里插入图片描述

📚函数参数默认值设定

  • ES6 允许给函数参数设置默认值,当调用函数时不给实参,则使用参数默认值。
  • 具有默认值的形参,一般要靠后。
  • 可与解构赋值结合。
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>函数参数默认值</title>
    </head>
    <body>
        <script>
            //1. 形参初始值 具有默认值的参数, 一般位置要靠后(潜规则)
            function add(a,b,c=10) {
                return a + b + c;
            }
            let result = add(1,2);
            console.log(result);
    
            //2. 与解构赋值结合
            function connect({host="127.0.0.1", username,password, port}){
                console.log(host)
                console.log(username)
                console.log(password)
                console.log(port)
            }
            connect({
                host: 'atguigu.com',
                username: 'root',
                password: 'root',
                port: 3306
            })
        </script>
    </body>
    </html>
    
    在这里插入图片描述

📚rest参数

  • ES6 引入rest参数,用于获取函数的实参,用来代替 arguments,作用与 arguments 类似。将接收的参数序列转换为一个数组对象。
  • 用在函数形参中,语法格式:fn(a, b, ...args),写在参数列表最后面。
  • 注意:rest参数非常适合不定个数参数函数的场景。
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>rest参数</title>
    </head>
    <body>
        <script>
            // ES5 获取实参的方式
            function date(){
                console.log(arguments);
            }
            date('热辣滚烫','飞驰人生2','第二十条');
    
            // rest 参数
            function date(...args){
                console.log(args);
            }
            date('飞驰人生2','热辣滚烫','第二十条');
    
            // rest 参数必须要放到参数最后
            function fn(a,b,...args){
                console.log(a);
                console.log(b);
                console.log(args);
            }
            fn(1,2,3,4,5,6);
    
        </script>
    </body>
    </html>
    
    在这里插入图片描述

📚spread扩展运算符

  • 扩展运算符(spread)也是三个点(...)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列,对数组进行解包。可用在调用函数时,传递的实参,将一个数组转换为参数序列。
  • 扩展运算符也可以将对象解包。
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>扩展运算符</title>
    </head>
    <body>
        <script>
            // 展开数组
            function fn(a, b, c) {
                console.log(arguments);
                console.log(a + b + c);
            }
            let arr = ['red', 'green', 'blue']; 
            fn(...arr)
            
            // 数组合并
            let A = [1, 2, 3];
            let B = [4, 5, 6];
            let C = [...A, ...B];
            console.log(C);
    
            // 对象合并
            let obj1 = {
                a: 123
            };
            let obj2 = {
                b: 456
            };
            let obj3 = {
                c: 789
            };
            let obj = { ...obj1, ...obj2, ...obj3 };
            console.log(obj);
        </script>
    </body>
    </html>
    

在这里插入图片描述

📚Symbol

🐇Symbol基本介绍与使用

  • ES6 引入了一种新的原始数据类型 Symbol,表示独一无二的值。它是 JavaScript 语言的第七种数据类型,是一种类似于字符串的数据类型。
  • JavaScript 的七种基本数据类型:
    • 值类型(基本类型):string、number、boolean、undefined、null、symbol
    • 引用数据类型:object(包括了array、function)
  • Symbol的特点:
    • Symbol的值是唯一的,用来解决命名冲突的问题。
    • Symbol值不能与其他数据进行运算。
    • Symbol定义的对象属性不能使用for...in循环遍历,但是可以使用Reflect.ownKeys来获取对象的所有键名。
  • : 遇到唯一性的场景时要想到Symbol。
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>symbol</title>
    </head>
    <body>
        <script>
            //创建Symbol
            let s = Symbol();
            console.log(s, typeof s);
            // 添加具有标识的Symbol
            let s2 = Symbol('尚硅谷');
            let s3 = Symbol('尚硅谷');
            console.log(s2 === s3);
            //Symbol.for 创建,名字相同的 Symbol 具有相同的实体。
            let s4 = Symbol.for('尚硅谷');
            let s5 = Symbol.for('尚硅谷');
            console.log(s4 === s5)
            // 输出Symbol变量的描述,使用description
            let s6 = Symbol('测试');
            console.log(s6.description);
            //不能与其他数据进行运算
            let result = s + 100;
            let result1 = s > 100;
            let result2 = s + s;
        </script>
    </body>
    </html> 
    
    在这里插入图片描述

🐇对象添加Symbol类型的属性

  • 案例:安全地向对象中添加属性和方法。
  • 分析:如果直接向对象中添加属性或方法,则原来对象中可能已经存在了同名属性或方法,会覆盖掉原来的。所以使用 Symbol 生成唯一的属性或方法名,可以更加安全地添加。
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Symbol 创建对象属性</title>
    </head>
    <body>
        <script>
            // 这是一个 game 对象,假设我们不知道里面有什么属性和方法
            const game = {
                uname: '俄罗斯方块',
                up: function () { },
                down: function () { }
            }
    
            // 通过 Symbol 生成唯一的属性名,然后给 game 添加方法
            let [up, down] = [Symbol('up'), Symbol('down')];
            game[up] = function () {
                console.log('up');
            }
            game[down] = function () {
                console.log('down');
            }
    
            // 调用刚刚创建的方法
            game[up]();
            game[down]();
        </script>
    </body>
    </html>
    

在这里插入图片描述

🐇Symbol内置值

  • 除了定义自己使用的 Symbol 值以外,ES6 还提供了11 个内置的 Symbol 值,指向语言内部使用的方法。可以称这些方法为魔术方法,因为它们会在特定的场景下自动执行。
    在这里插入图片描述

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Symbol内置属性</title>
    </head>
    <body>
        <script>
            class Person{
                static [Symbol.hasInstance](param){
                    console.log(param);
                    console.log("我被用来检测类型了");
                    return false;
                }
            }
    
            let o = {};
    
            console.log(o instanceof Person);
    
            // 数组使用 concat 方法时,是否可以展开
            const arr = [1,2,3];
            const arr2 = [4,5,6];
            arr2[Symbol.isConcatSpreadable] = false;
            console.log(arr.concat(arr2));
        </script>
    </body>
    </html>
    

    在这里插入图片描述

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

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

相关文章

Java-Arrays工具类的常见方法总结

在Java中&#xff0c;提供了一个专门用于操作数组的工具类&#xff0c;即Arrays类&#xff0c;该类提供了一些方法对数组进行排序&#xff0c;打印&#xff0c;复制等操作。下面是一些该工具类方法总结。 1.Arrays.aslist() 作用&#xff1a;当我们想直接将数组中的全部内容(…

【计算机网络】数据链路层--以太网/MTU/ARP/RARP协议

文章目录 一、以太网1.以太网帧格式2.MAC地址3.局域网的转发原理 二、MTU1.什么是MTU2.MTU对IP协议的影响3.MTU对UDP影响4.MTU对于TCP协议的影响 三、ARP协议1.ARP协议的作用2.ARP数据报的格式3.ARP协议的工作流程 一、以太网 “以太网” 不是一种具体的网络, 而是一种技术标准…

命令执行 [WUSTCTF2020]朴实无华1

做题&#xff1a; 打开题目 我们用dirsearch扫描一下看看 扫描到有robots.txt&#xff0c;访问一下看看 提示我们 /fAke_f1agggg.php 那就访问一下&#xff0c;不是真的flag bp抓包一下 得到提示&#xff0c; /fl4g.php&#xff0c;访问一下看看 按alt&#xff0c;点击修复文…

使用 C++23 协程实现第一个 co_await 同步风格调用接口--Qt计算文件哈希值

C加入了协程 coroutine的特性&#xff0c;一直没有动手实现过。看了网上很多文章&#xff0c;已经了解了协程作为“可被中断和恢复的函数”的一系列特点。在学习过程中&#xff0c;我发现大多数网上的例子&#xff0c;要不就是在main()函数的控制台程序里演示yeild,await, resu…

Nginx网络服务二-----(虚拟机和location)

一、HTTP设置 1.设置虚拟主机 1.1Nginx 基于域名---虚拟主机 include /apps/nginx/conf.d/*.conf; 1.2Nginx 基于端口---虚拟主机 在做了域名的基础上&#xff0c;按照以下步骤继续 1.3Nginx 基于IP---虚拟主机 2.server下的root root路径格式 指定文件的路径 url …

1.1_1 计算机网络的概念、功能、组成和分类

文章目录 1.1_1 计算机网络的概念、功能、组成和分类&#xff08;一&#xff09;计算机网络的概念&#xff08;二&#xff09;计算机网络的功能&#xff08;三&#xff09;计算机网络的组成1.组成部分2.工作方式3.功能组成 &#xff08;四&#xff09;计算机网络的分类 总结 1.…

线性代数:向量空间

目录 向量空间 Ax 0 的解空间S Ax b 的全体解向量所构成集合不是向量空间 基、维数、子空间 自然基与坐标 例1 例2 向量空间 Ax 0 的解空间S Ax b 的全体解向量所构成集合不是向量空间 基、维数、子空间 自然基与坐标 例1 例2

使用redisMQ-spring-boot-starter实现消息队列和延时队列

简介 redisMQ-spring-boot-starter是一个轻量级的、基于Redis实现的消息队列中间件&#xff0c;它有如下优点&#xff1a; 开箱即用&#xff0c;你几乎不用添加额外的配置支持消息队列、延时队列&#xff0c;并提供精细化配置参数提供消息确认机制支持虚拟空间&#xff0c;不…

非洲数字经济持续崛起 本地化策略让传音提前入局

非洲市场&#xff0c;被誉为全球最后的“边疆级”市场&#xff0c;吸引着全球目光。近日&#xff0c;非洲开发银行最新报告指出&#xff0c;未来两年非洲的经济增长将优于世界其他地区&#xff0c;2023 年和 2024 年实际国内生产总值 (GDP) 平均约为 4%。广阔的非洲大陆焕发着勃…

PLC设置网口通讯的原因

PLC设置网口通讯功能&#xff0c;是现场总线向工业以太网的迈进&#xff0c;更是为了在网口之上构建更为庞大、开放的大一统的生态系统。 有了以太网&#xff0c;特别是TCP/IP协议后&#xff0c;全员工控人的日常工作更为便利了。 主要体现在以下4点&#xff1a; 1.再也不需要…

TiDB 社区智慧合集丨TiDB 相关 SQL 脚本大全

非常感谢各位 TiDBer 在之前 【TiDBer 唠嗑茶话会 48】非正式 TiDB 相关 SQL 脚本征集大赛&#xff01;( https://asktug.com/t/topic/996635 )里提供的各种常用脚本。 在这篇文章中&#xff0c;我们整理了社区同学提供的一系列 TiDB 相关 SQL 脚本&#xff0c;希望能为大家在…

基于springboot+vue的车辆管理系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

【云动世纪:Apache Doris 技术之光】

本文节选自《基础软件之路&#xff1a;企业级实践及开源之路》一书&#xff0c;该书集结了中国几乎所有主流基础软件企业的实践案例&#xff0c;由 28 位知名专家共同编写&#xff0c;系统剖析了基础软件发展趋势、四大基础软件&#xff08;数据库、操作系统、编程语言与中间件…

短视频新媒体的福音:视频抽插帧AI效率是人工的100倍以上

进入全民短视频时代&#xff0c;人像视频的拍摄也正在迈向专业化。随着固化审美的瓦解&#xff0c;十级磨皮的网红滤镜被打破&#xff0c;多元化的高级质感成为新的风向标&#xff0c;“美”到每一帧是人们对动态视频提出的更高要求。 目前&#xff0c;大部分手机均可记录主流的…

【Vuforia+Unity】AR05-实物3D模型识别功能实现(ModelTarget )

不管是什么类型的识别Vuforia的步骤基本都是&#xff1a; 把被识别的物体转成图、立体图、柱形图&#xff0c;3D模型、环境模型&#xff0c;然后模型生成Vuforia数据库-导入Unity-参考模型位置开始摆放数字内容&#xff0c;然后参考模型自动隐藏-发布APP-识别生活中实物-数字内…

体验LobeChat搭建私人聊天应用

LobeChat是什么 LobeChat 是开源的高性能聊天机器人框架&#xff0c;支持语音合成、多模态、可扩展的&#xff08;Function Call&#xff09;插件系统。支持一键免费部署私人 ChatGPT/LLM 网页应用程序。 地址&#xff1a;https://github.com/lobehub/lobe-chat 为什么要用Lobe…

【Python笔记-设计模式】工厂模式

一、说明 (一) 解决问题 提供了一种方式&#xff0c;在不指定具体类将要创建的情况下&#xff0c;将类的实例化操作延迟到子类中完成。可以实现客户端代码与具体类实现之间的解耦&#xff0c;使得系统更加灵活、可扩展和可维护。 (二) 使用场景 希望复用现有对象来节省系统…

C# cass10 宗地初始化-根据 “预编号” “权利人”图层对应信息 批量添加到宗地图层

运行环境Visual Studio 2022 c# cad2016 cass10 根据 “预编号” “权利人”图层对应信息 批量添加到宗地图层 一、主要步骤 zdimport 方法&#xff1a;这个方法用于导入宗地信息。首先通过调用 AutoCAD API 获取当前活动文档、数据库和编辑器对象。然后根据 CreatePalette.Se…

Web3 基金会推出去中心化之声计划:投入高额 DOT 和 KSM ,助力去中心化治理

作者&#xff1a;Web3 Foundation Team 编译&#xff1a;OneBlock 原文&#xff1a;https://medium.com/web3foundation/decentralized-voices-program-93623c27ae43 Web3 基金会为 Polkadot 和 Kusama 创建了去中心化之声计划&#xff08;Decentralized Voices Program&…

【深度学习笔记】3_1 线性回归

注&#xff1a;本文为《动手学深度学习》开源内容&#xff0c;仅为个人学习记录&#xff0c;无抄袭搬运意图 3.1 线性回归 线性回归输出是一个连续值&#xff0c;因此适用于回归问题。回归问题在实际中很常见&#xff0c;如预测房屋价格、气温、销售额等连续值的问题。与回归问…