ES6的简单使用

news2025/1/2 2:37:19

1.ES6基本介绍

1996 年 11 月,JavaScript 的创造者 Netscape 公司,决定将 JavaScript 提交给标准化组织 ECMA,希望这种语言能够成为国际标准。次年,ECMA 发布 262 号标准文件(ECMA-262)的第一版,规定了浏览器脚本语言的标准,并将这种语言称为 ECMAScript,这个版本就是 1.0 版。

该标准从一开始就是针对 JavaScript 语言制定的,但是之所以不叫 JavaScript,有两个原因。一是商标,Java 是 Sun 公司的商标,根据授权协议,只有 Netscape 公司可以合法地使用 JavaScript 这个名字,且 JavaScript 本身也已经被 Netscape 公司注册为商标。二是想体现这门语言的制定者是 ECMA,不是 Netscape,这样有利于保证这门语言的开放性和中立性。

因此,ECMAScript 和 JavaScript 的关系是,前者是后者的规格,后者是前者的一种实现(另外的 ECMAScript 方言还有 JScript 和 ActionScript)。日常场合,这两个词是可以互换的

2.let关键词

举例如下:

<body>
    <script>
        // let关键词声明的变量有块级作用域
        // {
        //     let num = 10;
        // }
        // console.log(num); 
        //块级作用域
        // for (let i = 0; i < 5; i++) {}
        // console.log(i);
            
        //变量提升
        // console.log(num);
        // let num = 10;


        //暂时性死区,只要块级内有let就轮不到外边的来管
        var num = 1;
        {
            console.log(num);
            let num = 10;
        }
    </script>
</body>

3.for循环中var和let的区别

在var里面:

setTimeout是异步执⾏,10ms后往任务队列⾥⾯添加⼀个任务,只有主线线上的全部执⾏完,才会执⾏任务队列⾥的任务,当主线执⾏完成后,i是5,所以此时再去执⾏任务队列⾥的任务时,i全部是5了。对于打印5次是:

每⼀次for循环的时候,settimeout都执⾏⼀次,但是⾥⾯的函数没有被执⾏,⽽是被放到了任务队列⾥⾯,等待执⾏,for循环了5次,就放了5次,当主线程执行完成后,才进入任务队列里面执行。

在let里面:

因为for循环头部的let不仅将i绑定到for循环中,事实上它将其重新绑定到循环体的每一次迭代中,确保上一次迭代结束的值重新被赋值。setTimeout里面的function()属于一个新的域,通过var定义的变量是无法传入到这个函数执行域中的,通过使用let来声明块变量能作用于这个块,所以function就能使用i这个变量了。

注意:

由于var命令的变量提升机制,var命令实际只会执行一次,而let命令不存在变量提升,所以每次循环都会执行一次,声明一个新变量(但初始化的值不同),for的每次循环都是不同的块级作用域,let声明的变量也是块级作用域,所以也不存在重复声明的问题,let声明变量的for循环里,每个匿名函数实际上引用的都是一个新的变量。

当然,如果要使用var当做循环循环头的话,出现循环后打印出的结果一模一样的问题,可以使用闭包来解决。原文链接:https://blog.csdn.net/weixin_44703582/article/details/124445632

4.const关键字

<body>
    <script>

        // let [a, b, c] = [1, '王小明', 8, '男'];
        // console.log(a);
        // console.log(b);
        // console.log(c);
        //结果 1 王小明 8

        // let [ ,a, b, c] = [1, '王小明', 8, '男'];
        // console.log(a);
        // console.log(b);
        // console.log(c);
        //结果 王小明 8 男 

        const [n1, n2, ...n] = ["蛮子", "易", "赵信", "盖伦", "皇子"];
                                //结果
        console.log(n1);        // 蛮子
        console.log(n2);        // 易
        console.log(n);         // ["赵信", "盖伦", "皇子"]
    </script>
</body>

举例1如下:

    <script>
        const {name, age} = {name: "小白", age: 18};
        function sayHi () {
            return `大家好`;
        }
        //换行会报错
        //let str = "<ul><li>" + name + "</li></ul>";

        //换行不会报错,随便写标签,${name}还可以全局抓值
        let str = `
            <ul>
                <li>姓名: ${name}</li>
                <li>年龄: ${age}</li>
                <li>${sayHi()}</li>
            </ul>
        `;
        document.querySelector('div').innerHTML = str;
    </script>
</body>

举例2如下

<body>
    <table align="center" border="1" width="600" cellspacing="0">
        <thead>
            <tr>
                <th>ID</th>
                <th>姓名</th>
                <th>性别</th>
                <th>年龄</th>
                <th>操作</th>
            </tr>
        </thead>
        <tbody>
        </tbody>
    </table>
    <script>
        var userList = [
            {id: 1, name: '张三丰', gender: '男', age: 108},
            {id: 2, name: '张无忌', gender: '男', age: 22},
            {id: 3, name: '赵敏', gender: '女', age: 18},
            {id: 4, name: '周芷若', gender: '女', age: 18},
            {id: 5, name: '杨逍', gender: '男', age: 58}
        ]
        // 循环数组拼接成字符串形式
        var str = '';
        for (var i = 0; i < userList.length; i++) {
            // str += "<tr><td>" + userList[i].id + "</td><td>" + userList[i].name + "</td><td>" + userList[i].gender + "</td><td>" + userList[i].age + "</td><td><button class='del'>删除</button></td></tr>";
            str += `
                <tr>
                    <td>${userList[i].id}</td>
                    <td>${userList[i].name}</td>
                    <td>${userList[i].gender}</td>
                    <td>${userList[i].age}</td>
                    <td><button class='del'>删除</button></td>
                </tr>
            `;
        }
        // console.log(str);
        var tbody = document.querySelector('tbody');
        tbody.innerHTML = str;
    </script>
</body>

<body>
    <div class="box">
        <h3>沙雕新闻</h3>
        <ul>
        </ul>
    </div>
    <script>
        let titles = [
            '一大仙在公安局“跳大神”对周围人发功说:“你今晚必死无疑”',
            '小偷给关二爷下跪,给民警送锦旗',
            'nginx反向代理配置中你不知道的二三事',
            '女子怀疑家中进小偷,报警后发现是自己老公',
            '美国男子抢劫中餐厅,因语言不通空手而归'
        ];
        let str = '';
        for (let i = 0; i < titles.length; i++) {
            str += `
                <li>
                    <a href="#">
                        //使用默认值的情况
                        ${titleHandle(titles[i])} 
                         //可以覆盖默认值的情况,非常方便改动
                        ${titleHandle(titles[i], 15, '~~')} 
                    </a>
                </li>`;
        }
        document.querySelector('ul').innerHTML = str;

        // 思路: 封装一个函数对标题进行处理
        // 判断标题长度是否超过20个字符,如果没有超过,则不进行处理
        // 如果超过20个字符,则截取20个字符,之后再拼接 ...  即可
        // 参数1:要处理的标题
        function titleHandle (title, length = 20, mark = ' ...') {
            if (title.length < length) {
                return title;
            } else {
                return title.substr(0, length) + mark;
            }
        }
    </script>
</body>

rest参数

使用arguments的模式的时候,什么都不用写

什么是伪数组:

伪数组就是不是真实的数组,无法直接调用数组方法或期望length属性有什么特殊的行为,但仍可以像遍历数组那样来遍历它们,所以叫伪数组。

注意:用箭头函数后可以直接定义变量然后创建函数

<body>
    <script>
        // function Person (name, age) {
        //     this.name = name;
        //     this.age = age;
        //     this.sayHi = function () {  这里相当于定义一个方法,方法获取方法外变量用${}
        //         console.log(`大家好,我叫${this.name}, 今年${this.age}岁`);
        //     }
        // }

        // let p = new Person('王小明', 8);
        // console.log(p.name);
        // console.log(p.age);
        // p.sayHi();

        //报错
        let Person = (name, age) => {
            this.name = name;
            this.age = age;
        }

        new Person('王小明', 8);
    </script>
</body>
<body>
    <script>
        // let show = () => {
        //     console.log(arguments);
        // }

        // show(1, 22, 333);

        let show = (...abc) => {
            console.log(abc);
        }

        show(1, 22, 333);
    </script>
</body>
<body>
    <button>btn</button>

    <script>
        // document.querySelector('button').onclick = function () {
            // this指的是事件的调用者 --> button
            // console.log(this);
        // }
        
        //箭头函数没有this,外层函数this是谁,箭头函数就是谁,所以是window
        // console.log(this === window);
        // document.querySelector('button').onclick =  () => {
        //     console.log(this === window);
        // }

        
        document.querySelector('button').onclick = function () {
            console.log(this);
            let e = () => {
                console.log(this);
            }
            e();
        }

    </script>
</body>
         //正常情况
         let add=(a,b)=>{
            return a+b;
         }

        //满足第一个条件可简写为
         let add = (a, b) => a + b;

        //满足第二个条件
          let add = a => a + 10;

<body>
    <script>
        const goodsId = 10001;
        const goodsName = '机械键盘';
        const goodsPrice = 369;

        //此处可以省略属性的值
        const obj = {
            goodsId,
            goodsName,
            goodsPrice,
            //这里不能用箭头函数,如果要用必须加:号
            ad () {
                console.log('用这个键盘吃鸡太爽了');
            }
        }

        console.log(obj.goodsName);
        obj.ad();

        // const obj = {
        //     goodsId: 10001,
        //     goodsName: '机械键盘',
        //     goodsPrice: 369,
        // }

    </script>
</body>

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

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

相关文章

Vue表单数据修改与删除

学习来源&#xff1a;视频p6 书接上文 目录页面修改修改对话框视频教程的做法后端提供接口前端调用接口修改完成后提交删除功能后端开设接口前端调用最终成果展示页面修改 将之前的 BookManage 页面的按钮改为想要的功能 可以注意到修改按钮的标签以及绑定了事件 handleClick…

RK3568核心板以太网大数据测试报告-万象奥科

1. 测试对象HD-RK3568-IOT 底板基于HD-RK3568-CORE工业级核心板设计&#xff08;双网口、双CAN、5路串口&#xff09;&#xff0c;接口丰富&#xff0c;适用于工业现场应用需求&#xff0c;亦方便用户评估核心板及CPU的性能。适用于工业自动化控制、人机界面、中小型医疗分析器…

docker环境下docker-compose一键式搭建fastdfs文件存储服务系统

前言 本节内容我们使用docker-compose一键式搭建一套fastdfs服务&#xff0c;实现docker环境下的文件存储服务&#xff0c;在开始本节内容之前&#xff0c;我们需要提前安装好docker和docker-compose环境。fastdfs是一套分布式的文件存储服务系统&#xff0c;主要有tracker和s…

pipenv的基本使用

一. pipenv 基础 pipenv安装&#xff1a; pip install pipenvpipenv常用命令 pipenv --python 3 # 创建python3虚拟环境 pipenv --venv # 查看创建的虚拟环境 pipenv install 包名 # 安装包 pipenv shell # 切换到虚拟环境中 pip list # 查看当前已经安装的包&#xff0…

地方征信平台第2讲:河北省征信

河北省征信有限公司&#xff0c;注册成立于2022年12月25日&#xff0c;注册资本6330万元人民币。股东及持股比例如下&#xff1a;河北省惠信大数据科技服务有限公司、35.1975%。唐山国控集团有限公司、14.22%。石家庄城控投资集团有限责任公司、 10.8215%。石家庄市国有资本经营…

【017】筛选数据并整理(筛选、返回行号、清除全部数据)_#VBA

自动化办公1. 筛选1.1 在某一基础上筛选1.2 多条件筛选2. 返回行号3. 删除某列重复数据4. 删除当页全部数据5. 求和6. 复制黏贴6.1 第一种6.2 第二种6.2 第三种7. 全部数据1. 筛选 主要使用的命名方式如下 ActiveSheet.Range("$A$1:$L$41500").AutoFilter Field:1,…

打电话哪款蓝牙耳机好?打电话好的蓝牙耳机推荐

耳机除了听歌之外&#xff0c;还经常会用到接听电话。很多真正的无线耳机&#xff0c;在宣传页面上&#xff0c;都会着重介绍自己的耳机在降噪、音质方面的性能&#xff0c;以及他们自己的耳机的性能&#xff0c;下面分享几款打电话好的蓝牙耳机。 一、南卡小音舱蓝牙耳机 蓝…

人机交互设计概述

人机交互的软件工程实践 1.人机交互设计概述 交互设计视图提高产品或系统的可用性和用户体验。他首先研究、了解某类用户的需求&#xff0c;然后再通过设计来满足用户的需求。随着产品和操作变得越来越复杂&#xff0c;越需要用户掌握新技能&#xff0c;因此设计师对如何能帮…

密码学基础(一)常见密码算法分类

一、密码算法分类&#xff1a; 密码算法主要分为三类&#xff1a;对称密码算法、 非对称密码算法、摘要算法。 二、对称密码算法&#xff08;Symmetric-key Algorithm&#xff09; 1、概念 对称加密(也叫私钥加密)指加密和解密使用相同密钥的加密算法。有时又叫传统密码算…

8Manage PMO:如何借助系统软件解决多项目管理难点

随着企业不断发展壮大&#xff0c;大多数企业不管性质、规模和行业如何&#xff0c;都会同时进行多个项目&#xff0c;这已然成为一个普遍现象。虽然多项目管理可以提高资源利用率&#xff0c;加速项目交付&#xff0c;但同时也会带来一系列的难点。 如何在多个项目之间有效地…

Python基于词频排序快速挖掘需求大类

Python基于词频排序快速挖掘需求大类 作者&#xff1a;虚坏叔叔 博客&#xff1a;https://xuhss.com 早餐店不会开到晚上&#xff0c;想吃的人早就来了&#xff01;&#x1f604; 一、所有的代码 这是所有的代码 from collections import defaultdict import jieba.posseg a…

华为机试题:HJ101 输入整型数组和排序标识,对其元素按照升序或降序进行排序(python)

文章目录&#xff08;1&#xff09;题目描述&#xff08;2&#xff09;Python3实现&#xff08;3&#xff09;知识点详解1、input()&#xff1a;获取控制台&#xff08;任意形式&#xff09;的输入。输出均为字符串类型。1.1、input() 与 list(input()) 的区别、及其相互转换方…

数字信息-数字编码挂钩法

一、前方无路&#xff0c;一切才刚开始0呼啦圈 1蜡烛2鹅 3金元宝4青龙5钩子6哨子 7七仙女8八卦镜9药酒二、少年中国说看到“1”想到“树”&#xff0c;想到“树”&#xff0c;想到“智慧树”&#xff0c;再想到“少年智则国智”看到“2”想到“鸭子”&#xff0c;想到“鸭子”&…

基于 centos7 搭建 laravel+scout+elasticsearch+ik-analyzer 用于中文分词全文检索服务及测试

目录基于 centos7 搭建 laravelscoutelasticsearchik-analyzer 用于中文分词全文检索服务及测试相关软件及版本安装或升级jdk&#xff08;版本&#xff1a;19.0.2&#xff09;安装es&#xff08;版本&#xff1a;8.1.1&#xff09;安装ik-analyzer&#xff08;版本&#xff1a;…

transformer目标检测开山之作detr

1. 将一个batch的图片输入backone获得feature。 &#xff08;2&#xff0c;c&#xff0c;w&#xff0c;h&#xff09;先输入resnet50中&#xff0c;得到&#xff08;2&#xff0c;2048&#xff0c;w&#xff0c;h&#xff09;。虽然这里channel不是256&#xff0c;但是在输入e…

pg mysql oracle 中的schema

1、schema。 pg中的schema表示当前db中数据库对象的命名空间(namespace)&#xff0c;数据库对象包括但不限于表、函数、视图、索引等。 对于熟悉mysql的人来说&#xff0c;在第一次看到pg中的schema的概念时&#xff0c;可能会疑惑&#xff0c;schema不是表示database的吗&…

如何使用码匠连接 Elasticsearch

目录 在码匠中集成 Elasticsearch 在码匠中使用 Elasticsearch 关于码匠 Elasticsearch 是一个开源的分布式搜索和分析引擎&#xff0c;常用于处理大规模数据集的搜索、实时数据分析和数据挖掘任务。它支持多种数据源&#xff0c;包括关系型数据库&#xff08;如 MySQL、Pos…

不想重写Dockerfile如何更改docker容器的挂载目录

一、问题 从网络上下载的很多Dockerfile或docker-compose文件进行启动容器的时候&#xff0c;部分重要的目录是依赖volumes挂载到容器内部的&#xff0c;如图 这就会出现一个问题&#xff0c;当我们想将容器打包&#xff0c;便于以后使用的时候&#xff0c;这部分挂载的文件是…

ArcGIS中地形渲染图制作技巧

01 概述 DEM数据作为GIS数据中常见的一种数据&#xff0c;经常都会使用到&#xff0c;除了用来生成等高线、高程点和做各种分析之外&#xff0c;生成地形渲染图也是常见的用途之一&#xff0c;这里给大家介绍一下ArcGIS中地形渲染图制作技巧&#xff0c;希望能够对大家有所帮…

领英开发外贸客户新方式—领英精灵

一、领英精灵是什么&#xff1f; 领英精灵是在LinkedIn领英这个全球最大的职业社交平台基础上研发出的一款工具软件&#xff0c;领英精灵最初研发定位是帮助那些想要在LinkedIn领英上挖掘开发客户需求的人群使用&#xff0c;但他的功能又不仅仅局限于外贸行业。干一行说一行&a…