ES6的简单使用

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>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码敲上天.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值