es6新特性_基本语法

1. ES_Test01.html

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

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        //1.let声明变量
        let a;
        let b = 10, c = "hello", d = [];
        //1.1 变量不能重复声明
        let e = 1;
        //let e=2;
        //1.2 块级作用域,while,for,{},if,...中的都为块级作用域
        {
            let gir = "女";
        }
        //console.log(gir);//报错
        //1.3 不存在变量提升
        //console.log(boy);
        let boy = "男";
        //1.4 不影响作用域链
        {
            let school = "教室";
            function sc() {
                console.log(school);
            }
            sc();
        }

        //2.const声明常量
        const SCHOOL = "XXX学校";
        //2.1 一定需要赋初值
        //const A; //报错
        //2.2 定义常量需要大写                
        //const SCHOOL_SC="XXX学校";
        //2.3 常量值不可修改
        //SCHOOL="YYY学校";
        //console.log(SCHOOL);
        //2.4 块级作用域
        {
            const HOST = 385;
        }
        //console.log(HOST);
        //2.5 const修改数组或者对象元素的值,不算对常量的修改,不会报错,因为数组和对象中的常量为地址值
        const TEAM = ['UZi', 'MLXG'];
        TEAM.push('Ming');
        TEAM[0] = 'UZI';
        console.log(TEAM.toString());

        //3.ES6允许按照一定模式从数组和对象中提取值,对变量进行赋值=》结构赋值
        //3.1 数组的结构赋值
        const APP = ['微信', '抖音'];
        let [WeChat, Trill] = APP;
        console.log(WeChat + "=>" + Trill);
        //3.2 对象的结构赋值
        const NEUSOFT = {
            name: '微博',
            year: 2000,
            funName: function () {
                console.log("我是函数");
            }
        }
        let { name, year, funName } = NEUSOFT;    //对象结构赋值的名字和对象的名字需要匹配,数组不需要
        console.log(name);
        console.log(year);
        funName();  //结构赋值经常用,弃用NEUSOFT.funName()调用方式

        //4.ES6中引入 [` `] 声明字符串----模板字符串
        //4.1 变量声明
        let str = `hello word`;
        console.log(str);
        //4.2 内容中可以直接出现换行符,而''和""不可以
        let strurli = `<ul>
                        <li>沈腾</li>            
                        <li>玛丽</li>
                        <li>魏翔</li>
                        <li>艾伦</li>        
                        <li>常远</li>
                    </ul>`;
        console.log(strurli);
        //4.3 支持变量拼接方式
        let lovest = '魏翔';
        let out = `${lovest}是开心麻花的演员`;
        console.log(out);

        //5.ES6里里面允许在大括号里面,直接写入变量和函数,作为对象的属性
        let namestr = "变量名";
        let chage = function () {
            console.log("我是chage函数");
        }
        let obj = {
            namestr,
            chage,
            fun() {
                console.log("我是ES6中的特殊书写方式");
            }
        }
        console.log(`名字为${obj.namestr}`);
        obj.chage();
        obj.fun();

        //6.ES6允许使用箭头函数
        //6.1 基本使用
        let fun = (a, b) => {
            return a + b;
        }
        let result = fun(1, 1);
        console.log(result);
        //6.2 this是静态的,this始终指向函数声明所在作用域下的this的值=》window;普通函数的this为当前对象
        window.name1 = "hello";
        let objname = {
            name1: "word"
        }
        console.log(this.name1);
        let func = () => {
            console.log(this.name1);
        }
        func();
        func.call(objname); //可以改变this的值,方法名.call()方法
        //6.3 箭头函数不能用作构造函数实例化对象
        // let Person=(name,age)=>{
        //     this.name1=name;
        //     this.age=age;
        // }
        // let p=new Person("小王",23);
        // console.log(p);
        //6.4 箭头函数中不能使用argumnents变量
        // let fn=()=>{
        //     console.log(arguments);
        // }
        // fn(1,2,3);
        //6.5 箭头函数的简写
        //6.5.1 省略小括号
        let add = n => {
            return n + n;
        }
        console.log(add(1));
        //6.5.2 省略花括号,当代码体只有一条语句的时候,return也必须省略
        let del = n => n - 1;
        console.log(del(2));
        //注意:箭头函数不适合与this有关的回调,事件回调,不适合做对象的方法但不是不能
        let objfun = {
            name: 'helloword',
            funnane: function () {
                return this.name; //为当前对象的name属性值
            },
            getArrow: () => {
                return this.name; //为window的name属性值
            }
        }

        //7.ES6允许给函数参数赋值初始值
        //7.1 形参初始值,具有默认值的参数,一般位置要靠后,有值传过来就用传递而来值,没有值传递过来就用默认值
        let adddel = function (a, b, c = 10) {
            console.log(a + b + c);
        }
        adddel(1, 2, 3);
        //7.2 参数默认值与结构赋值结合使用
        let addupdate = function ({ host = '127.0.0.1', root, password, port }) {
            console.log(`主机名:${host}\n端口号:${port}\n用户名:${root}\n密码:${password}`);
        }
        addupdate({
            host: 'localhost',
            root: 'root',
            password: '12345678',
            port: 3306
        })

        //8.ES6引入rest参数,用来代替ES5中的arguments
        function es5() {
            console.log(arguments); //对一个arguments对象的参数序列
        }
        es5(1, 2, 3, 4);
        //...args必须放参数的最后 function es6(a,b,c,...args){}
        function es6(...args) {
            console.log(args);  //args的返回值是一个数组,可以用数组相关的api
        }
        es6(5, 6, 7, 8);

        //9.扩展运算符[...],作用为将[数组]转换为逗号分隔的[参数序列]又叫伪数组
        const tfboys = ['易烊千玺', '王俊凯', '王源'];
        function springFestivalGala() {
            console.log(arguments); //参数序列,伪数组:'易烊千玺','王俊凯','王源'
        }
        springFestivalGala(...tfboys); //springFestivalGala('易烊千玺','王俊凯','王源')

        //10.扩展运算符的应用场景
        //10.1 数组的合并,es5时候使用concat()函数实现
        const kuaizi = ['王太利', '肖央'];
        const fenghuang = ['曾毅', '玲花'];
        const zuixuanxiaoopingguo = [...kuaizi, ...fenghuang];
        console.log(zuixuanxiaoopingguo);
        //10.2 数组的克隆
        const sanzhihua = ['E', 'G', 'M'];
        const sanyecao = [...sanzhihua];
        console.log(sanyecao);
        //10.3 将伪数组转换为真数组
        function tyboys(...args) {
            console.log(arguments);
            const args_new = [...arguments];
            console.log(args_new);
        }
        tyboys(1, 2, 3, 4, 5, 6);

        //11.Symbol是新的原始数组类型,表示独一无二的值,它是JavaScript的第七种数据类型,类似于string字符串的数组类型
        //Symbol得值是唯一的,用来解决命名冲突的问题;
        //Symbol值不能进行数据计算,不能进行比较
        //Symbol定义的属性不能用for...in遍历,但可以使用Reflect.ownKeys来获取对象的所有键名
        //11.1 创建Symbol
        let s1 = Symbol();
        console.log(s1);
        let s2 = Symbol('哈哈'); //传入参数有点类似于注释的作用,不是定义的值
        console.log(s2);
        let s3 = Symbol('哈哈');
        console.log(s3 == s2);
        let s4 = Symbol.for('哈哈哈'); //通过此方式创建,根据注释值可以得到唯一的s4;
        console.log(s4);
        let s5 = Symbol.for('哈哈哈'); //通过此方式创建,根据注释值可以得到唯一的s5;
        console.log(s5);
        let s6 = Symbol.for('哈哈哈哈'); //通过此方式创建,根据注释值可以得到唯一的s5;
        console.log(s6);
        console.log(s4 == s5);
        console.log(s4 == s6);

        //注:javascript七种数据类型:USONB 
        // undefine
        // string symbol
        // object
        // number null
        // boolean

        //12.Symbol基本使用
        //12.1 向对象添加Symbol类型的方法或属性 up down "独一无二"
        let game = {
            up: '上',
            down: '下',
            name: '斗地主'
        }
        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);

        //13.迭代器 for...of遍历:原生具备iterator接口的数据可用for...of遍历【Array,Araguments,Set,Map,String,TypedArray,NodeList】
        const xiyou = ['唐僧', '孙悟空', '猪八戒', '沙僧'];
        for (let v of xiyou) {    //for...of中间的v保存的是键值
            console.log(v);
        }
        console.log(xiyou); //原型中有Symbol的iterator接口
        for (let v in xiyou) {    //for...in中间的v保存的是下标
            console.log(v);
        }

        //14.生成器:其实就是特殊的函数,是ES6提供的一种异步编程解决方案;异步编程 纯回调函数 node fs ajax mongdb
        //14.1
        function* gen() {
            console.log("hello generator");
        }
        let iterator = gen(); //即时调用也不会执行除非使用iterator.next()(原型中有next就是具备iteraotr接口)才会执行函数输出hello generator
        console.log(iterator);
        iterator.next();
        console.log("-------------------");
        //14.2
        function* gen1() { //yeild会将代码分为四段
            console.log('AA');
            yield '111';
            console.log('BB');
            yield '222';
            console.log('CC');
            yield '333';
            console.log('DD');
        }
        let iterator1 = gen1(); //只要调用iterator1.next()指针就会向下走
        iterator1.next(); //会执行console.log('111');
        console.log(iterator1.next()); //会先输出console.log('222'); 在执行输出 {value: '222', done: false}
        iterator1.next(); //console.log('333');
        console.log(iterator1.next()); //会先输出console.log('444'); 在执行输出 value: undefined, done: true}
        iterator1.next(); //不输出,因为指针已经出去了
        console.log(iterator1.next()); //因为指针已经出去了 {value: undefined, done: true}
        iterator1.next(); //不输出,因为指针已经出去了
        console.log("-------------------");
        //14.3
        function* gen2() { //yeild会将代码分为四段
            console.log('111');
            yield 'aaa';
            console.log('222');
            yield 'bbb';
            console.log('333');
            yield 'ccc';
            console.log('444');
        }
        for (let v of gen2()) {
            console.log(v); //会执行console.log('111'); 会执行输出 yield '111'=》后面的111
        }

        //15.生成器函数的参数传递
        //15.1
        function* gen3(args) {
            console.log(args);
            let one = yield 111;
            console.log(one);
            let two = yield 222;
            console.log(two);
            let there = yield 333;
            console.log(there);
        }
        let iterator2 = gen3("AAA");
        console.log(iterator2.next());//先输出AAA,在输出{value: '111', done: false}
        //next()方法在调用是可以传递实参,实参就是“yield '111'”整个语句的返回结果
        //第二次调用next语句,调用参数的结果,将作为第一次“yield '111'”整个语句的返回结果,用let one接收
        console.log(iterator2.next('BBB'));
        //第三次调用next语句,调用参数的结果,将作为第二次“yield '222'”整个语句的返回结果,用let two接收
        console.log(iterator2.next('CCC'));
        //第四次调用next语句,调用参数的结果,将作为第三次“yield '333'”整个语句的返回结果,用let there接收
        console.log(iterator2.next('DDD'));

        //16.Promise异步编程解决方案,文件读取,网络请求ajax,数据库读取:先读取用户名,在根据用户名读取用户信息,在根据用户信息读取XXX,层层套场景,...异步操作
        //16.1 见1-Promise基本使用

        //17.Set(集合),唯一的数据,实现了iterator接口,可以使用扩展运算符,和for...of遍历
        //17.1 Set集合声明,Set里面存放的是伪数组格式
        // Arguments(6) [1, 2, 3, 4, 5, 6,]和{'好事', '坏事', '没事', '大事', '小事'}都为伪数组格式可以转化为数据[...XXX]
        let set1 = new Set();
        let set2 = new Set(['好事', '坏事', '没事', '大事', '小事']);
        console.log(set1);
        console.log(set2);
        //17.2 size
        console.log(set1.size);
        console.log(set2.size);
        //17.3 add
        set1.add('净事');
        console.log(set1);
        //17.4 delete
        set2.delete('净事');
        console.log(set2);
        //17.5 has
        console.log(set2.has('没事'));
        //17.6 clear()
        set1.clear();
        console.log(set1);
        //17.7 for...of
        for (let v of set2) {
            console.log(v);
        }

        //18.Map
        //18.1 Map声明
        let map = new Map();
        console.log(map);
        //18.2 set
        map.set('name', '天气预报');
        map.set('change', function () {
            console.log('Map真强大');
        })
        let key = {
            school: '北京大学'
        }
        map.set(key, ['北京', '天津', '上海']);
        console.log(map);
        //18.3 size
        console.log(map.size);
        //18.4 delete
        map.delete('name');
        console.log(map.size);
        //18.5 get
        console.log(map.get('change'));
        console.log(map.get(key));
        //18.6 clear()
        // map.clear();        
        // console.log(map.size);
        //18.7 遍历
        for (let v of map) {
            console.log(v);
        }

        //19.class类
        //19.1 es5时
        // function Phone(brand,price){
        //     this.brand=brand;
        //     this.price=price;
        // }
        // //添加方法
        // Phone.prototype.call=function(){   //此种方式可以通过实例.方法名或属性名调用
        //     console.log("打电话");
        // }
        // let Huawei=new Phone('华为',5999);
        // console.log(Huawei);
        // Huawei.call();
        //19.2 es6时class
        class Phone {
            constructor(brand, price) { //只要通过new关键字创建对象都会执行
                this.brand = brand;
                this.price = price;
            }
            // 方法必须写成该语法,不可写成ES5的对象完整形式=》call:function(){}
            call() {
                console.log("我可以打电话");
            }
        }
        let onePlus = new Phone('1+', 1999);
        console.log(onePlus);
        onePlus.call();
        //19.3 es5时静态成员
        function Amnil() {

        }
        Amnil.name = '狗'; //属于类的静态属性,不属于实例
        Amnil.change = function () { //属于类的静态方法,不属于实例
            console.log("汪汪汪");
        }
        //let amnil=new Amnil();
        //console.log(amnil.name); //不可以通过实例.方法名或属性名调用,但是可以通过Amnil.name或Amnil.change()调用
        //amnil.change();
        console.log(Amnil.name);
        Amnil.change();
        //19.4 es6时静态成员
        class Cat {
            static name = '猫';
            static change() {
                console.log("喵喵喵");
            }
        }
        // let cat=new Cat(); //使用static声明的属性不属于实例对象
        // console.log(cat.name); //undefine
        // cat.chage(); //报错
        console.log(Cat.name); //类.属性名调用
        Cat.change(); //类.方法名调用

        //20.es6时class类继承
        class Ipad {
            constructor(brand, price) {
                this.brand = brand;
                this.price = price;
            }
            call() {
                console.log("我是Ipad");
            }
        }
        class SmartIpad extends Ipad {
            constructor(brand, price, color, size) {
                super(brand, price);
                this.color = color;
                this.size = size;
            }
            photo() {
                console.log("拍照");
            }
            playGame() {
                console.log("玩游戏");
            }
        }
        const xiaomi = new SmartIpad('小米', 1799, '白色', '4.7inch');
        console.log(xiaomi);
        xiaomi.call();

        //21.es6子类对父类方法的重写
        class Ipad1 {
            call() {
                console.log("我是Ipad1");
            }
        }
        class SmartIpad1 extends Ipad1 {
            call() {
                console.log("我是SmartIpad1");
            }
        }
        const xiaomi1 = new SmartIpad1();
        xiaomi1.call(); //只能调用子类重写的方法,不可以通过super关键字调用父类

        //22.es6-class中getter和setter设置
        class Ipad2 {
            get call() {
                console.log("我是Ipad2=>get");
            }
            set price(newVal) {
                console.log(`Ipad2的价格为${newVal}`);
            }
        }
        let xiaomi2 = new Ipad2();
        xiaomi2.call; //不能写成xiaomi2.call()
        xiaomi2.price = 10; //不能写成xiaomi2.price(10)

        //23.es6数值扩展
        //23.1 Number.EPLON 表示最小的精度,视为相等,小数点后16位,相当于50.2=50
        function equal(a, b) {
            return Math.abs(a - b) < Number.EPSILON;
        }
        console.log(equal(0.1 + 0.2, 0.3));
        //23.2 二进制和八进制
        let two = 0b1010;
        let one = 0o777;
        let three = 100;
        let four = 0xff;
        console.log(two);
        console.log(one);
        console.log(three);
        console.log(four);
        //23.3 检测一个数值是否为有限数
        console.log(Number.isFinite(100 / 3));
        //23.4 检测一个数值是否为NaN
        console.log(Number.isNaN(123 + NaN));
        //24.5字符串转换为整数
        let strs = '12345';
        let number = Number.parseInt(strs);
        console.log(typeof number);
        //24.5 判断一个数是否为整数
        console.log(Number.isInteger(123.3));
        //24.6 将数字的小数部分去掉
        console.log(Math.trunc(12.3));
        //24.7 判断一个数到底是正数、负数、零,正数返回1,负数返回-1,零返回0
        console.log(Math.sign(22));

        //25.es6的对象方法扩展
        //25.1 Object.is 判断两个值是否完全相等
        console.log(Object.is(120, 120));
        console.log(Object.is(NaN, NaN)); //true
        console.log(NaN === NaN); //false
        //25.2 Object.assign 对象的合并
        const config1 = {
            host: 'localhost',
            port: 3306,
            name: 'root',
            pass: 'root',
            des: '同名被覆盖'
        }
        const config2 = {
            host: '127.0.0.1',
            port: 33060,
            name: 'root',
            pass: '123456',
            undes: '同名覆盖'
        }
        console.log(Object.assign(config1, config2)); //第一个将第二个覆盖
        //25.3 Object.setPrototypeOf设置原型对象  Object.getPrototypeof获取原型对象
        const proty = {
            name: '原型'
        }
        const city = {
            regin: '复兴'
        }
        Object.setPrototypeOf(proty, city);//全局对象的原型
        console.log(proty);
        console.log(Object.getPrototypeOf(proty));

    </script>
</body>

</html>

 1.1 迭代器练习.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        const arr=[
            {
                name:'hello',
                age:[12,13,14]
            },
            {
                name:'word',
                age:[12,15,13]
            },
            {
                name:'helloword',
                age:[12,13,15,14,16]
            },
        ]
        for(let v of arr){
            console.log(v.name);
            for(let age of v.age){
                console.log(age);
            }
            console.log("*********");
        }
    </script>
</body>
</html>

1.2 箭头函数练习.html 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //从数组中返回偶数元素
        const ARR=[12,12,34,45,65,23,44,54,77];
        const result=ARR.filter(item=>item%2==0);
        console.log(result);
    </script>
</body>
</html>

1.3 生成器函数练习1.html

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

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        //异步编程  1s后控制台输出111,2s后控制台输出222,3s后控制台输出333
        function one() {
            setTimeout(() => {
                console.log("111");
            }, 1000);
        }
        function two() {
            setTimeout(() => {
                console.log("222");
            }, 2000);
        }
        function there() {
            setTimeout(() => {
                console.log("333");
            }, 3000);
        }
        function* gen(){
            yield one();
            yield two();
            yield there();
        }
        let iteroter=gen();
        iteroter.next();
        iteroter.next();
        iteroter.next();

    </script>
</body>

</html>

1.4 生成器函数练习2.html

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

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        function getUsers() {
            setTimeout(() => {
                let data = '用户数据';
                iteroter.next(data); //第二次调用next
            }, 1000);
        } 
        function getOrders() {
            setTimeout(() => {
                let data = '订单数据';                
                iteroter.next(data); //第三次调用next
            }, 1000);
        } 
        function getGoods() {
            setTimeout(() => {
                let data = '商品数据';                
                iteroter.next(data); //第四次调用next
            }, 1000);
        }
        function* gen(){ //三个yield会将代码块中的代码分为四段代码,函数代码分隔符
            //1段
            let Users=yield getUsers(); //1段2段
            console.log(Users);
            //2段
            let Orders=yield getOrders(); //2段3段
            console.log(Orders);
            //3段
            let Goods=yield getGoods(); //3段4段
            console.log(Goods);
            //4段
        }
        let iteroter=gen();
        iteroter.next();  //会执行1段代码并且返回1段yield后面的值 ,console.log(iteroter.next());的返回值为{value: undefined, done: false} 因为函数中没返回值,但是可以通过.next(传参方式实现)

    </script>

</body>

</html>

---------------------------------------------------------------------------------------------------------------------------------

2. ES_Test02_模板化暴露.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script type="module">
        //1.es6模块化语法 export(用于规定模块的对外接口)和import(用于输入其他模块提供的功能)
        //1.1 暴露方式一 export 属性/方法
        import * as e1 from './m1.js';
        console.log(e1.school);
        e1.teach();
        console.log(e1);
        //1.2 暴露方式二 export { };
        import * as e2 from './m2.js';
        console.log(e2.school);
        e2.teacher();
        console.log(e2);
        //1.3 默认暴露 export default{ }
        import * as e3 from './m3.js';
        console.log(e3.default.school);
        e3.default.teach();
        console.log(e3);        

    </script>
</body>
</html>

3. ES_Test03_模板化导入.html

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

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script type="module">
        /*
        //1.es6模块化语法 import导入方式
        //1.1 通用导入方式1 
        import * as e1 from './m1.js';
        console.log(e1.school);
        e1.teach();
        console.log(e1);
        //1.2 通用导入方式1;
        import * as e2 from './m2.js';
        console.log(e2.school);
        e2.teacher();
        console.log(e2);
        //1.3 通用导入方式1
        import * as e3 from './m3.js';
        console.log(e3.default.school);
        e3.default.teach();
        console.log(e3); 
        */

        //1.4 结构赋值方式
        import { school, teach } from './m1.js';
        console.log(school2);
        teacher();

        import { school as school2, teacher } from './m2.js'; //若引入的模块和其他地方引入同名可以采用起别名方式
        console.log(school2);
        teacher();

        import { default as m3 } from './m3.js'; //必须起别名
        console.log(m3.school);
        m3.teach();
        console.log(m3);

        /*
        //1.5 简便方式,只能针对默认暴露
        import m3 from './m3.js';
        console.log(m3.school);
        m3.teach();
        console.log(m3);
        */

    </script>
</body>

</html>

m1.js

export let school = "复兴小学";

export function teach() {

    console.log("复兴小学的老师");

}

m2.js

let school = "复兴中学";

function teacher() {

    console.log("复兴中学的老师");

}

export { school, teacher };

m3.js

export default {

    school: '阿荣旗第一中学',

    teach: function () {

        console.log("阿荣旗第一中学的老师")

    }

}

4. Set集合实践.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        let arr=[1,2,3,4,5,4,3,2,1];
        //1.数组去重
        let result=[...new Set(arr)]; //将伪(类)数组转换为数组。去重数组
        console.log(result);
        //2.交集

        //3.并集
        arr2=[4,5,6,5,6];
        let result2=[...new Set([...arr,...arr2])];
        console.log(result2);
        //4.差集
    </script>
</body>
</html>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值