• ES6(ECMASript 相关介绍,ECMASript 6 新特性)


    1 ECMASript 相关介绍

    1.1 es介绍

    ES全称EcmaScript,是脚本语言的规范,而平时经常编写的JavaScript,是EcmaScript的一种实现,所以ES新特性其实指的就是JavaScript的新特性

    而6-11指的是EcmaScript他的几个版本

    1.2 为什么要学习 ES6

    • ES6 的版本变动内容最多,具有里程碑意义
    • ES6 加入许多新的语法特性,编程实现更简单、高效
    • ES6 是前端发展趋势,就业必备技能

    1.3 ES6 兼容性

    http://kangax.github.io/compat-table/es6/ 可查看兼容性

    如果写的es6不兼容,不用担心,有专门的工具可以es6—>es5

    2 ECMASript 6 新特性

    2.1.let 关键字

    let 关键字用来声明变量,使用 let 声明的变量有几个特点:

    1. 不允许重复声明
    2. 块儿级作用域
    3. 不存在变量提升(不允许在声明变量之前去使用它)
    4. 不影响作用域链

    应用场景:以后声明变量使用 let 就对了

    eg. let.html

    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>lettitle>
    head>
    <body>
        <script>
            //声明变量
            let a;
            let b,c,d;
            let e = 100;
            let f = 521, g = 'iloveyou', h = [];
    
            //1. 变量不能重复声明
            // let star = '罗志祥';
            // let star = '小猪';
    
            //2. 块儿级作用域  全局, 函数, eval
            // if else while for 
            // {
            //     let girl = '周扬青';
            // }
            // console.log(girl);
    
            //3. 不存在变量提升
            // console.log(song);
            // let song = '恋爱达人';
    
            //4. 不影响作用域链
            {
                let school = '尚硅谷';
                function fn(){
                    console.log(school);
                }
                fn();
            }
    
        script>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    eg. let-实践案例.html

    DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>点击 DIV 换色title>
        <link crossorigin="anonymous" href="https://cdn.bootcss.com/twitter-bootstrap/3.3.7/css/bootstrap.min.css"
            rel="stylesheet">
        <style>
            .item {
                width: 100px;
                height: 50px;
                border: solid 1px rgb(42, 156, 156);
                float: left;
                margin-right: 10px;
            }
        style>
    head>
    
    <body>
        <div class="container">
            <h2 class="page-header">点击切换颜色h2>
            <div class="item">div>
            <div class="item">div>
            <div class="item">div>
        div>
        <script>
            //获取div元素对象
            let items = document.getElementsByClassName('item');
    
            //遍历并绑定事件
            for(let i = 0;i<items.length;i++){
                items[i].onclick = function(){
                    //修改当前元素的背景颜色
                    // this.style.background = 'pink';
                    items[i].style.background = 'pink';
                    
                }
            }
            
        script>
    body>
    
    html>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    上面代码for循环里面,如果上面使用var 就会报错:var全局变量,每次都会让i自增,等三次循环之后,i就变成了3,当鼠标点击某一个元素时就会执行回调函数,这时i 3 而元素也就只到2 .把var 换成let 就好了,let是块级,互不影响

    2.2. const 关键字

    const 关键字用来声明常量,const 声明有以下特点

    1. 声明必须赋初始值
    2. 标识符一般为大写
    3. 不允许重复声明
    4. 常量的值不允许修改
    5. 块儿级作用域
      6)对于数组和对象的元素修改,不算做对常量的修改,不会报错(固定内存地址)

    常量:值不能修改的量

    eg. const.html

    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>const 定义常量title>
    head>
    <body>
        <script>
            //声明常量
            const SCHOOL = '尚硅谷';
    
            //1. 一定要赋初始值
            // const A;
            //2. 一般常量使用大写(潜规则)
            // const a = 100;
            //3. 常量的值不能修改
            // SCHOOL = 'ATGUIGU';
            //4. 块儿级作用域
            // {
            //     const PLAYER = 'UZI';
            // }
            // console.log(PLAYER);
            //5. 对于数组和对象的元素修改, 不算做对常量的修改, 不会报错
            const TEAM = ['UZI','MXLG','Ming','Letme'];
            // TEAM.push('Meiko');
    
            
        script>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    注意: 对象属性修改和数组元素变化不会出现 const 错误

    应用场景:声明对象类型使用 const,非对象类型声明选择 let

    2.3.变量的解构赋值

    ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构赋值。(简化书写量)

    eg. 解析赋值.html

    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>
            //ES6 允许按照一定模式从数组和对象中提取值,对变量进行赋值,
            //这被称为解构赋值。
            //1. 数组的结构
            // const F4 = ['小沈阳','刘能','赵四','宋小宝'];
            // let [xiao, liu, zhao, song] = F4;
            // console.log(xiao);
            // console.log(liu);
            // console.log(zhao);
            // console.log(song);
    
            //2. 对象的解构
            // const zhao = {
            //     name: '赵本山',
            //     age: '不详',
            //     xiaopin: function(){
            //         console.log("我可以演小品");
            //     }
            // };
    
            // let {name, age, xiaopin} = zhao;
            // console.log(name);
            // console.log(age);
            // console.log(xiaopin);
            // xiaopin();
    
            let {xiaopin} = zhao;
            xiaopin();
    
    
        script>
    body>
    
    html>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    2.4.模板字符串

    模板字符串(template string)是增强版的字符串,用反引号(`)标识,特点:

    1. 字符串中可以出现换行符(如果使用之前的’'会报错)
    2. 可以使用 ${xxx} 形式输出变量(变量拼接)

    [``] , ‘’ , “”

    eg. 模板字符串.html

    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>
            // ES6 引入新的声明字符串的方式 『``』 '' "" 
            //1. 声明
            // let str = `我也是一个字符串哦!`;
            // console.log(str, typeof str);
    
            //2. 内容中可以直接出现换行符
            let str = `
    • 沈腾
    • 玛丽
    • 魏翔
    • 艾伦
    `
    ; //3. 变量拼接 let lovest = '魏翔'; let out = `${lovest}是我心目中最搞笑的演员!!`; console.log(out);
    script> body> html>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    2.5.简化对象写法

    ES6 允许在大括号里面,直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。

    eg. 简化对象写法.html

    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>
            //ES6 允许在大括号里面,直接写入变量和函数,作为对象的属性和方法。
            //这样的书写更加简洁
            let name = '尚硅谷';
            let change = function(){
                console.log('我们可以改变你!!');
            }
    
            const school = {
                name,
                change,
                improve(){
                    console.log("我们可以提高你的技能");
                }
            }
    
            console.log(school);
    
        script>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    2.6.箭头函数

    ES6 允许使用「箭头」(=>)定义函数。

    箭头函数的注意点:

    1. 如果形参只有一个,则小括号可以省略
    2. 函数体如果只有一条语句,则花括号可以省略,函数的返回值为该条语句的
      执行结果
    3. 箭头函数 this 指向声明时所在作用域下 this 的值
    4. 箭头函数不能作为构造函数实例化
    5. 不能使用 arguments

    eg. 箭头函数.html

    
    
    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>
            // ES6 允许使用「箭头」(=>)定义函数。
            //声明一个函数
            // let fn = function(){
    
            // }
            // 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);
    
            //2. 不能作为构造实例化对象
            // let Person = (name, age) => {
            //     this.name = name;
            //     this.age = age;
            // }
            // let me = new Person('xiao',30);
            // console.log(me);
    
            //3. 不能使用 arguments 变量
            // let fn = () => {
            //     console.log(arguments);
            // }
            // fn(1,2,3);
    
            //4. 箭头函数的简写
                //1) 省略小括号, 当形参有且只有一个的时候
                // let add = n => {
                //     return n + n;
                // }
                // console.log(add(9));
                //2) 省略花括号, 当代码体只有一条语句的时候, 此时 return 必须省略
                // 而且语句的执行结果就是函数的返回值
                let pow = n => n * n;
                    
                console.log(pow(8));
    
        script>
    body>
    
    html>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79

    注意:箭头函数不会更改 this 指向,用来指定回调函数会非常合适

    eg. 箭头函数实践.html

    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>箭头函数实践title>
        <style>
            div {
                width: 200px;
                height: 200px;
                background: #58a;
            }
        style>
    head>
    <body>
        <div id="ad">div>
        <script>
            //需求-1  点击 div 2s 后颜色变成『粉色』
            //获取元素
            let ad = document.getElementById('ad');
            //绑定事件
            ad.addEventListener("click", function(){
                //保存 this 的值
                // let _this = this;
                //定时器
                setTimeout(() => {
                    //修改背景颜色 this
                    // console.log(this);
                    // _this.style.background = 'pink';
                    this.style.background = 'pink';
                }, 2000);
            });
    
            //需求-2  从数组中返回偶数的元素
            const arr = [1,6,9,10,100,25];
            // const result = arr.filter(function(item){
            //     if(item % 2 === 0){
            //         return true;
            //     }else{
            //         return false;
            //     }
            // });
            
            const result = arr.filter(item => item % 2 === 0);
    
            console.log(result);
    
            // 箭头函数适合与 this 无关的回调. 定时器, 数组的方法回调
            // 箭头函数不适合与 this 有关的回调.  事件回调, 对象的方法
    
        script>
    body>
    
    html>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55

    filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表,接收两个参数,一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断
    filter()函数会返回新的数组,记得声明一个数组来保存

    普通函数的this总是指向调用它的那个对象,箭头函数自身没有this,它的this一直都是指向其定义的作用域中,所以箭头函数的this不是在对象里面

    2.7 函数参数的默认值设置

    eg. 参数默认值.html

    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>
            //ES6 允许给函数参数赋值初始值
            //1. 形参初始值 具有默认值的参数, 一般位置要靠后(潜规则)
            // function add(a,c=10,b) {
            //     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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    2.7. rest 参数

    ES6 引入 rest 参数,用于获取函数的实参,用来代替 arguments

    eg. rest参数.html

    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>
            // ES6 引入 rest 参数,用于获取函数的实参,用来代替 arguments
            // ES5 获取实参的方式
            // function date(){
            //     console.log(arguments);
            // }
            // date('白芷','阿娇','思慧');
    
            // rest 参数
            // function date(...args){
            //     console.log(args);// filter some every map 
            // }
            // date('阿娇','柏芝','思慧');
    
            // 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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    注意:rest 参数非常适合不定个数参数函数的场景

    2.8. spread 扩展运算符

    扩展运算符(spread)也是三个点(…)。它好比 rest 参数的逆运算,将个数组转为用逗号分隔的参数序列,对数组进行解包。

    eg. spread扩展运算符.html

    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>
            // 『...』 扩展运算符能将『数组』转换为逗号分隔的『参数序列』
            //声明一个数组 ...
            const tfboys = ['易烊千玺','王源','王俊凯'];
            // => '易烊千玺','王源','王俊凯'
    
            // 声明一个函数
            function chunwan(){
                console.log(arguments);
            }
    
            chunwan(...tfboys);// chunwan('易烊千玺','王源','王俊凯')
    
            
    
        script>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    eg. 扩展运算符应用.html

    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>
        <div>div>
        <div>div>
        <div>div>
        <script>
            //1. 数组的合并 情圣  误杀  唐探
            // const kuaizi = ['王太利','肖央'];
            // const fenghuang = ['曾毅','玲花'];
            // // const zuixuanxiaopingguo = kuaizi.concat(fenghuang);
            // const zuixuanxiaopingguo = [...kuaizi, ...fenghuang];
            // console.log(zuixuanxiaopingguo);
    
            //2. 数组的克隆
            // const sanzhihua = ['E','G','M'];
            // const sanyecao = [...sanzhihua];//  ['E','G','M']
            // console.log(sanyecao);
    
            //3. 将伪数组转为真正的数组
            const divs = document.querySelectorAll('div');
            const divArr = [...divs];
            console.log(divArr);// arguments
            
     
        script>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    2.9.Symbol

    2.9.1.Symbol 基本使用

    ES6 引入了一种新的原始数据类型 Symbol,表示独一无二的值。它是
    JavaScript 语言的第七种数据类型,是一种类似于字符串的数据类型。
    Symbol 特点

    1. Symbol 的值是唯一的,用来解决命名冲突的问题
    2. Symbol 值不能与其他数据进行运算(四则运算,拼接,比较)
    3. Symbol 定义的对象属性不能使用for…in循环遍历,但是可以使用Reflect.ownKeys 来获取对象的所有键名

    eg. symbol.html

    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>symboltitle>
    head>
    <body>
        <script>
            //创建Symbol
            let s = Symbol();
            // console.log(s, typeof s);
            let s2 = Symbol('尚硅谷');
            let s3 = Symbol('尚硅谷');
            // s2 === s3 false
            //Symbol.for 创建
            let s4 = Symbol.for('尚硅谷');
            let s5 = Symbol.for('尚硅谷');
            // s4 === s5 true
    
            //不能与其他数据进行运算
            //    let result = s + 100;
            //    let result = s > 100;
            //    let result = s + s;
    
            // js数据类型
            // USONB  you are so niubility 
            // u  undefined
            // s  string  symbol
            // o  object
            // n  null number
            // b  boolean
    
        script>
    body>
    html> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    js数据类型
    USONB you are so niubility
    u undefined
    s string symbol
    o object
    n null number
    b boolean

    eg. Symbol创建对象属性.html

    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>
            //向对象中添加方法 up down
            let game = {
                name:'俄罗斯方块',
                up: function(){},
                down: function(){}
            };
            
            //声明一个对象
            // let methods = {
            //     up: Symbol(),
            //     down: Symbol()
            // };
    
            // game[methods.up] = function(){
            //     console.log("我可以改变形状");
            // }
    
            // game[methods.down] = function(){
            //     console.log("我可以快速下降!!");
            // }
    
            // console.log(game);
    
            //
            let youxi = {
                name:"狼人杀",
                [Symbol('say')]: function(){
                    console.log("我可以发言")
                },
                [Symbol('zibao')]: function(){
                    console.log('我可以自爆');
                }
            }
    
            console.log(youxi)
    
            
        script>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    注: 遇到唯一性的场景时要想到 Symbol

    2.9.2.Symbol 内置值

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

    eg. Symbol.match : match是Symbol的属性,Symbol.match作为对象的属性

    在这里插入图片描述

    eg. Symbol内置属性.html

    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);
    
            // const arr = [1,2,3];
            // const arr2 = [4,5,6];
            // arr2[Symbol.isConcatSpreadable] = false;
            // console.log(arr.concat(arr2));
        script>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
  • 相关阅读:
    【性能测试】资深老鸟总结,需求分析开始到性能压测实战...
    东方甄选推独立App自立门户;西湖大学『强化学习数学基础』教材书稿;经典书籍『深入浅出设计模式』Python版代码;前沿论文 | ShowMeAI资讯日报
    精准定位——MySQL日志学习的一天【错误、二进制、查询、慢查询】
    使用vue-pdf预览pdf文件
    Nexus的管理
    强化学习 -概述
    MySQL进阶4,常见函数
    linux篇【4】:进程与操作系统
    算法金 | 一个强大的算法模型,GP !!
    喹啉羧酸类 DHODH 抑制剂用于治疗急性髓系白血病
  • 原文地址:https://blog.csdn.net/weixin_51249285/article/details/126380199