ES6(1)

1. let关键字

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>01_let关键字</title>
</head>
<body>

<button>测试1</button>
<br>
<button>测试2</button>
<br>
<button>测试3</button>
<br>
<!--
***let
1. 作用:
  * 与var类似, 用于声明一个变量
2. 特点:
  * 在块作用域内有效
  * 不能重复声明
  * 不会预处理, 不存在提升
3. 应用:
  * 循环遍历加监听
  * 使用let取代var是趋势
-->
<script type="text/javascript">
    //console.log(age);// age is not defined
    let age = 12;
    //let age = 13;不能重复声明
    console.log(age);
    let btns = document.getElementsByTagName('button');
  
  //var 声明
    // for(var i=0; i<btns.length; i++){
    //     (function(i){  //产生闭包
    //         btns[i].onclick=function(){
    //         alert(i)
    //     }
    //     })(i)
       
    // }

//使用let
    for(let i=0; i<btns.length; i++){

        btns[i].onclick=function(){
          alert(i)  //i就是每个按钮的索引
        }
       
    }

</script>
</body>

</html>

2.const关键字

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4   <meta charset="UTF-8">
 5   <title>02_const关键字</title>
 6 </head>
 7 <body>
 8 <!--
 9 1. 作用:
10   * 定义一个常量
11 2. 特点:
12   * 不能修改
13   * 其它特点同let
14 3. 应用:
15   * 保存不用改变的数据
16 -->
17 <script type="text/javascript">
18     const sex = '';
19     console.log(sex);
20     //sex = '女';//不能修改
21     console.log(sex);
22 </script>
23 </body>
24 </html>

3.变量的解构赋值

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4   <meta charset="UTF-8">
 5   <title>03_变量的解构赋值</title>
 6 </head>
 7 <body>
 8 <!--
 9 1. 理解:
10   * 从对象或数组中提取数据, 并赋值给变量(多个)
11 2. 对象的解构赋值
12   let {n, a} = {n:'tom', a:12}
13 3. 数组的解构赋值
14   let [a,b] = [1, 'atguigu'];
15 4. 用途
16   * 给多个形参赋值
17 -->
18 <script type="text/javascript">
19     let obj = {name : 'kobe', age : 39};
20 //    let name = obj.name;
21 //    let age = obj.age;
22 //    console.log(name, age);
23     //对象的解构赋值
24     let {age,name} = obj;
25     console.log(age,name);
26 //    let {name, age} = {name : 'kobe', age : 39};
27 //    console.log(name, age);
28 
29     //3. 数组的解构赋值  不经常用
30     let arr = ['abc', 23, true];
31     let [a, b, c, d] = arr;
32     console.log(a, b, c, d);
33     //console.log(e);
34     function person(p) {//不用解构赋值
35         console.log(p.name, p.age);
36     }
37     person(obj);
38 
39     function person1({name, age}) {  //{name, age}=obj,结构赋值
40      console.log(name, age);
41     }
42     person1(obj);
43 
44 
45 </script>
46 </body>
47 </html>
4.模板字符串
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4   <meta charset="UTF-8">
 5   <title>04_模板字符串</title>
 6 </head>
 7 <body>
 8 <!--
 9 1. 模板字符串 : 简化字符串的拼接
10   * 模板字符串必须用 `` 包含
11   * 变化的部分使用${xxx}定义
12 -->
13 <script type="text/javascript">
14     let obj = {
15         name : 'anverson',
16         age : 41
17     };
18     console.log('我叫:' + obj.name + ', 我的年龄是:' + obj.age);
19 
20     console.log(`我叫:${obj.name}, 我的年龄是:${obj.age}`);
21 </script>
22 </body>
23 </html>
5.简化的对象写法
 
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 6     <title>Document</title>
 7 </head>
 8 <body>
 9     <script>
10 // <!--
11 // 简化的对象写法
12 // * 省略同名的属性值
13 // * 省略方法的function
14 
15         let name= 'cobo';
16         let age= 45;
17         // let obj={
18         //     name:name,
19         //     age:age
20         // }
21 
22         // console.log(obj.name)
23 
24 
25         let obj1={
26             name,
27             age
28         }
29 
30         console.log(obj1.name)
31 
32 
33             //普通额写法
34 //    let obj = {
35 //        x : x,
36 //        y : y,
37 //        getPoint : function () {
38 //            return this.x + this.y
39 //        }
40 //    };
41     //简化的写法
42     let obj = {
43         x,
44         y,
45         getPoint(){
46             return this.x
47         }
48     };
49     console.log(obj, obj.getPoint());
50     </script>
51 
52 </body>
53 </html>

 Symbol

1

<!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>
        // boolean  string  number null undefined Object
        // usonb 
        // you is so niubility

        //1. 创建 Symbol
        let s = Symbol();

        //2. 传入字符串描述创建
        let s2 = Symbol("UP");
        let s3 = Symbol("UP");

        //3. 调用对象的方法创建
        let s4 = Symbol.for("Down");
        let s5 = Symbol.for("Down");

        console.log(s4 === s5);
    </script>
</body>
</html>

2

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        //创建一个对象
        let obj = {
            a: 'xxx',
            run: function(){
                console.log("abc");
            }
        }

        //快速向对象中添加一个方法 run => 输出 测试
        // obj.run = function(){
        // };

        //通过 Symbol 添加属性或者方法
        // let run = Symbol('run');//121y212joi1hro1j2lke1
        // obj[run] = function () {
        //     console.log('测试');
        // };

        // console.log(obj);

        // console.log(obj.run());
        // console.log(obj[run]());


        let up = Symbol('up');
        
        let game = {
            name: "飞机大战",
            [up]: function(){
                console.log("向上")
            },
            [Symbol('down')]: function(){
                console.log("向下");
            }
        };
        console.log(game);
    </script>
</body>

</html>

3

<!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>
        let game = {
            name: "飞机大战",
            [Symbol('up')]: function(){
                console.log('向上')
            },
            [Symbol('down')]: function(){
                console.log('向下')
            },
            [Symbol('left')]: function(){
                console.log('向左')
            },
            [Symbol('right')]: function(){
                console.log('向右')
            },
        }
        //1. for...in 不能遍历 Symbol 类型的属性
        for(let i in game){
            console.log(i);
        }

        //2. Reflect.ownKeys 反射得到对象所有的属性名, 返回一个数组
        let attrs = Reflect.ownKeys(game);

        //遍历数组
        for(let i=0;i<attrs.length;i++){
            // attrs[0] = name
            // attrs[1] = Symbol('up')
            console.log(attrs[i])
            console.log(game[attrs[i]]);
        }
    </script>
</body>
</html>

4

<!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 是一个函数还是一个对象   Symbol('abc')  Symbol.for() 函数对象
        // Symbol 内置属性都是固定的写法    $().attr html
        // Symbol 的内置属性是为了扩展对象的功能

        let school = {
            name: "尚硅谷",
            //当对象用来判断类型的时候
            [Symbol.hasInstance]: function(){
                console.log('我被当做类型检测啦!!');
                return true;
            },
            //
            [Symbol.match]: function(){
                console.log("我被当做正则放在了 match 中调用");
                return 123456;
            }
        };

        let obj = {};
        //检测类型
        console.log(obj instanceof school);

        //用作正则使用
        let str = "iloveyou";
        console.log(str.match(school));


    </script>
</body>

</html>
原文地址:https://www.cnblogs.com/fsg6/p/13055959.html