20220305-ES6


title: ES6
author: 小乐
date: 2022/03/05

个人博客:https://wudixiaole.gitee.io/xiaole

1.什么是ECMAScript

ECMAScript是Ecma国际通过ECMA-262标准化的脚本程序设计语言

1.2为什么要学习es6

ES6版本标动内容多,具有里程碑意义。

ES6加入许多新语法特性,变成实现更简介、高效

ES6是前端发展趋势,就业必备技能

let用法

 <script>
        let items = document.getElementsByClassName('item');
        for(let i = 0;i<items.length; i++){
            items[i].onclick = function(){
                // 修改当前背景颜色
                this.style.background = 'blue';
            }   
        }
       
    </script>
    <style>
        .item {
            width: 30px;
            height: 20px;
            background-color: white;
            /* float: left; */
            display: inline-block;
            margin-left: 10px;
            border :solid  5px black;
        }
    </style>
</head>
<body>
    <h2 class="page-header">点击切换颜色</h2>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
   
</body>

const定义常量

   <script>
       const SCHOOL = '哇哈哈';
       console.log(SCHOOL); 
    // 1.   一定要赋初始值
    // 2.一般常量要大写
    // 3.常量值不可以修改
    // 4.块级作用域
//  5.对数组和对象的元素修改,不算做对常量的修改,不会报错
const TEAN= ['123' ,1 ,'132'];
TEAN.push('Meiko');
console.log(TEAN);
    </script>

变量的结构赋值

    <script>
        // 1.es6允许按照一定模式从数组和对象中取值,对变量进行赋值
        // 这被操作解构赋值。
        // 1.数组的结构
            const F4=['小沈阳','刘能','赵四','宋小宝'];
            let [xiao,liu,zhao,song]=F4;
            console.log(xiao);
            console.log(liu);
            console.log(zhao);
            console.log(song);
        // 2.对象的结构
         const ben ={
            name: '赵本山',
            age: '不详',
            xiaopin: function(){
                console.log('我可以演小品');
            }
         };
         let {name,age,xiaopin}=ben;
         console.log(name);
         console.log(age);
         console.log(xiaopin);
    </script>

ES6模板字符串

<script>
    // Es6中引入新的声明字符串的方式[``] ''  ""
    // 1.声明
    let str = `我也是个字符串`;
    console.log(str,typeof str);
    // 2.内容中可以直接出现换行符
    let str1 =`<ul>
        <li>沈腾</li>
        <li>玛丽</li>
        </ul>`;
        // 3.变量拼接
        let loverst ='魏翔';
        let out =`${loverst}xxx是我心目中最搞笑的演员`;
        console.log(out);
</script>

ES6对象的简化写法

<script>
    // ES6中允许在大括号里面,直接写入变量和函数,作为对象的属性和方法
    // 这样书写更简介
    let name ='哇哈哈';
    let change = function(){
        console.log('我们可以改变你');
    }

    const school ={
        name,
        change,
        import(){
            console.log('我们可以提高你的技能');
        }
    }
</script>

箭头函数声明以及特点

<script>
//  ES6中允许使用箭头=>定义函数
// 声明一个函数
// let fn1 =function(){

// }
// let fn = (a,b) => {
//     return a+b;
// }
// let result = fn(1,2);
// console.log(result);
//  this是静态的,this始终指向函数声明所在的作用域下的this的值
function getName(){
    console.log(this.name);
}
let getName2=()=>
{
    console.log(this.name);
}
// 设置window对象的name属性

const school ={
    name: "ATGUIGU"
}
window.name='哇哈哈';
// 直接调用
getName();
getName2();
// call方法调用
getName.call(school);
getName2.call(school);
// 不能作为构造函数实例化对象
// let Person = (name,age)=>{
//     name,
//     age,
// }
// let me = new Person('xiao',30);

// console.log(me);
// 3.不能保存实参,arguments变量
// let fn= () =>{
//     console.log(arguments);
// }
// fn(1,2,3);
// let fn = function(a,b){
//     console.log(arguments);
// }
// fn(1,2);
// 4.箭头函数的简写
// 4.1省略小括号,当形参有且只有一个的时候
let add =n=>{
    return n+n;
}
console.log(add(9));
// 4.5省略花括号,当代码体只有一条语句的时候执行结果就是函数的返回值
let pow  = n =>n*n
console.log(pow(8));
</script>

箭头函数的实践与应用场景

   <style>
       div{
           width: 200px;
           height: 200px;
           background-color: blue;
       }
    </style>
<script>
// 需求一,点击div 2s后颜色变成粉色
    // // let _this=this;
    // let ad = document.getElementById('ad');
    // ad.addEventListener("click",function(){
    //     setTimeout(() => {
    //         this.style.background = 'pink';
    //     }, 2000);
    // })
// 需求二,从数组中返回偶数的元素
// const arr =[1,6,9,18,100,20];
// const result = arr.filter(function(item){
//     if(item %2 ==0){
//         return true;
//     }else{
//         return false;
//     }
// })
// console.log(result);
const arr =[1,6,9,18,100,20];
const result = arr.filter(item => item %2 ==0);
console.log(result);
</script>

ES6函数参数的默认值设置

<script>
// es6允许给函数参数赋值初始值
function add(a,b,c=10){
    return a+b+c;
}
let result = add(1,2,3);
let result1 = add(1,2);
console.log(result);
console.log(result1);
// 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: 'localhost',
    username: 'root',
    password: 'root',
    port: 3306
})

</script>

ES6-rest 参数

<script>
// es6引入rest参数,用于获取函数的实参,用来代替arguments
// es5参数
// function date(){
//     console.log(arguments);

// }
// date('白芷','阿娇','四惠');
// rest参数
function date(c,b,...a){
    console.log(a);
    console.log(b);
    console.log(c);
}
// date('白芷','阿娇','四惠');
date(1,2,3,4,5,6)
</script>

ES6扩展运算符的介绍

<script>
// ...扩展运算符能将数组转化为逗号分隔的参数序列
const tfboys =['易烊千玺','王源','王俊凯'];
function chuwan(){
    console.log(arguments);
}
chuwan(...tfboys);
</script>

ES6扩展运算符的应用

   <div></div>
   <div></div>
   <div></div>
<script>
// 1.数组的合并
const kuaizi = ['王太利','肖扬'];
const fenghuang = ['曾毅','玲花'];
// const zuxuanxiaopinguo = kuaizi.concat(fenghuang);
const zuxuanxiaopinguo = [...fenghuang,...kuaizi];
console.log(zuxuanxiaopinguo);
// 2.数组的克隆
const sanzhihua = ['E','G','M'];
const sanyecao = [...sanzhihua];
console.log(sanyecao);
// 3.将伪数组转化为真正的数组
const divs = document.querySelectorAll('div');
console.log(divs);
console.log([...divs]);

ES6中Symbol的介绍与创建

<script>
    // 创建Symbol
    let s = Symbol();
    console.log(s,typeof s);
    let s2 = Symbol('哇哈哈');
    let s3 = Symbol('哇哈哈');
    let s4 = Symbol.for('哇哈哈');
   console.log(s2===s3,s4);
</script>

ES6对象添加Symbol类型的属性

<script>
//  向对象中添加方法 up down
let game ={...
let methods = {
    up: Symbol(),
    down: Symbol()
};
game[methods.up]= function(){
    consol.console.log('我可以改变形状');
}
// 方法二
let youxi ={
    name:'狼人杀',
    [Symbol('')]:function(){
        console.log('我可以发言')
    }
    
}
</script>

ES6迭代器介绍

迭代器是一种接口。

<script>
const xiyou =['唐僧','孙悟空','猪八戒','沙僧'];
// 使用for...of遍历数组
for(let v of xiyou){
    console.log(v);
}
let iterator = xiyou[Symbol.iterator]();
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());

</script>

生成器函数声明与调用

生成器函数是es6提供的一种异步编程解决方案,语法行为与传统函数完全不同。

<script>
// 生成器其实是一种特殊的函数
// 异步编程 纯回调函数 node fs ajax mongodb
// yield函数代码的分隔符
function *gen(){
    console.log('hello 111');
    yield '一只没有耳朵';
    console.log('hello 222');
    yield '一只没有尾巴';
    console.log('hello 333');
    yield '真奇怪';
    console.log('hello 444');

}
// let iterator = gen();
// console.log(iterator);
// iterator.next();
// iterator.next();
// iterator.next();
// iterator.next();
//遍历
for(let v of gen()){
    console.log(v);
}
</script>

ES6生成器函数的参数传递

<script>
// ES6生成器函数的参数传递
        function * gen(arg){
            console.log(arg)
            let one =yield 111;
            console.log(one);
     
            yield 222;
            yield 333;
        }
        // 获取迭代器对象
        let iterator =gen('AAA');
        console.log(iterator.next());
        // next方法可以传入实参
        console.log(iterator.next('bbb'));
        console.log(iterator.next('ccc'));
        // console.log(iterator.next());
        // console.log(iterator.next());
        // console.log(iterator.next());
</script>

ES6生成器函数实例

<script>
// 异步编程  文件操作  网络操作(Ajax,requeest) 数据库操作
// 1s后控制台输出 111 2s后输出222 3s后输出333、
// 回调地狱
    // setTimeout(() => {
    //     console.log(111);
    //     setTimeout(() => {
    //         console.log(222);
    //             setTimeout(() => {
    //                 console.log(333);
    //         }, 3000);
    //     }, 2000);
    // }, 1000);.
    function one(){
        setTimeout(() => {
            console.log(111);
            iterator.next();
        }, 1000);
    }
    function two(){
        setTimeout(() => {
            console.log(222);
            iterator.next();
        }, 2000);
    }
    function three(){
        setTimeout(() => {
            console.log(333);
            iterator.next();
        }, 3000);
    }
    function * gen(){
        yield one();
        yield two();
        yield three();
    }
    let iterator = gen();
    iterator.next();
</script>

ES6生成器函数实例2

<script>
    function getUsers(){
        setTimeout(() => {
            let data ='用户数据';
            iterator.next(data);
        }, 1000);
    }
    function getOrders(){
        setTimeout(() => {
            let data = '订单数据';
            iterator.next(data);
        }, 1000);
    }
    function getGoods(){
        setTimeout(() => {
            let data ='商品数据'
            iterator.next(data);
        }, 1000);
    }
    function * gen(){
        console.log(users)
        yield getUsers(orders);
        yield getOrders(orders);
        yield getGoods();
    }
    let iterator =gen();
    iterator.next();
</script>

promise介绍与使用

   <script>
        // 实例化Promise对象
        const p = new Promise(function(resolve,reject){
          setTimeout(function(){
                let data ='数据库中的用户数据';
                // resolve
                // resolve(data);
                let err = '数据读取失败';
                reject(err);
          },1000);
        });


        // 调用promise对象的then方法
        p.then(function(value){
            console.log(value);
        }, function(reason){
            console.error(reason);
        })
        
    </script>

promise.prototype…then方法

 <script>
    //    创建promise对象
    const p = new Promise((resolve,reject)=>{
        setTimeout(() => {
            resolve('用户数据');
        }, 1000);
    });
    // 调用then方法
    const result = p.then(value=>{
        console.log(value);
        return 123;
    },reason=>{
        console.warn(reason);
    })
    console.log(result);

   </script>

Promise对象catch方法

   <script>
    //    创建promise对象
    constp =new Promise((resolve,reject)=>{
        setTimeout(() => {
            reject("出错了");
        }, 1000);
    });
    p.catch(function(reason){
        console.warn(reason)
    });

   </script>

集合介绍与API

 <script>
// 声明一个set
let s = new Set();
let s2 = new Set(['大事儿','小事儿','好事儿']);
// 元素个数
console.log(s2.size);
console.log(s2,typeof s);
s2.add('喜事儿');
s2.delete('小事儿');
// 检测是否有'大事儿'元素
s2.has('大事儿');
console.log(s2);
s2.clear();
console.log(s2);
for (const v of s2) {
    console.log(v);
}
</script>

集合实践

   <script>
let arr =[1,2,3,4,5,4,3,2,1];
// 1.数组去重
let result = [...new Set(arr)];
console.log(result);
// 2.交集
let arr2 = [4,5,6,5,6];
let result2 = [...new Set(arr)].filter(item =>{
    let s2 =new Set(arr2);
    if(s2.has(item)){
        return true;
    }else{
        return false;
    }
});
let result3 = [...new Set(arr)].filter(item => new Set(arr2).has(item));
console.log(result3);
// 3.并集
let union =[...new Set ([...arr,...arr2])];
console.log(union);
// 差集
let diff = [...new Set(arr)].filter(item=> !(new Set(arr2).has(item)));
console.log(diff);

</script>

Map的介绍与API

<script>
// 声明Map
let m = new Map();
// 添加元素
m.set('name','哇哈哈');
console.log(m);
m.set('change',function(){
    console.log('我可以改变你');
});
console.log(m);
let key = {
    school: 'ATGUIGU'
};
m.set(key,['北京','伤害']);
console.log(m);
// 删除元素
m.delete('name');
// 获取元素
console.log(m.get(key));
// 清空
m.clear();
// 遍历
for(let v of m){
    console.log(v);
}
</script>

class类

<script>
// class
class phone{
    //构造方法名字不可以修改
    constructor(brand,price){
        this.brand =brand;
        this.price =price;
    }
    // 方法必须使用该语法
    call(){
        console.log('我可以打电话');
    }
}
let onePlus = new phone("1+",1999);
console.log(onePlus);
</script>

clss静态成员

   // function Phone(){

    // }
    // Phone.name='手机';
    // Phone.change=function(){
    //     console.log('我可以改变世界');
    // }
    // Phone.prototype.siz = '5.5inch';
    // let nokia = new Phone();
    // console.log(nokia.name);
    // console.log(nokia.size);
    class Phone{
        static name ='手机';
        static change(){
            console.log('我可以改变世界');

        }
    }
    let nokia =new Phone();
    console.log(nokia.name);
    console.log(Phone.name);

类继承

<script>
    class Phone{
        // 构造方法
        constructor(brand,price){
            this.brand = brand;
            this.price =price;
        }
        // 父类的成员属性
        call(){
            console.log('我可以打电话');
        }
    }
    class SmarPhone extends Phone{
        // 构造方法
        constructor(brand,price,color,size){
                super(brand,price);//Phone.call(this,brand,price)
                this.color = color;
                this.size =size;
        }
        photo(){
            console.log('我可以拍照');
        }
        playGame(){
            console.log('玩游戏');
        }
    }
    const xiaomi =new SmarPhone('小米',799,'黑色','4.7inch');
    console.log(xiaomi);


</script>

class中getter和setter设置

<script>
    // get和set
    class Phone{
        get price(){
            console.log('价格属性被读取了');
            return 'iloveyou';

        }
        set price(newVal){
            console.log('价格属性被修改了');
        }
    }
    let s = new Phone();
    console.log(s.price);
    s.price = 'free';

</script>

es6的数值扩展

<script>
    // 0.Number.EPSILON是js表示的最小精度
    console.log(0.1 + 0.2 == 0.3);
    // 二进制与八进制
    let b =0b1010;
    let o = 0o777;
    let d =100;
    // Number.isFinite检测一个数值是否为有限数
    console.log(Number.isFinite(100));
    console.log(Number.isFinite(100/0));
    // Number.isNAN检测一个数组是否为NAN
    console.log(Number.isNAN(123));
    // Number.parseInt Number.parseFloat字符串转整数
    console.log(Number.parseInt('5211314love'));
    console.log(Number.parseFloat('301415'));
    // Number.isInteger判断一个书是否为整数
    console.log(Number.isInteger(5));
    console.log(Number.isInteger(2.5));
    // Math.trunc将数字的小数部分抹掉
    console.log(Math.trun(3.5));
    // Math.sign判断一个书到底为正数 负数 还是零
    console.log(Math.sign(100));
    console.log(Math.sign(0));
    console.log(Math.sign(-20000));
</script>

对象方法扩展

<script>
//   object.is判断两个值是否完全相等
    console.log(Object.is(120,120));
// object.assign对象的合并
    const config1 = {
        host: 'localhost',
        port: 3306,
        name: 'root',
        pass: 'root'
    };
    const config2 = {
        host: 'http://www.baidu.com',
        port: 3306,
        name: 'baidu.com',
        pass: 'baidu'
    };
   console.log( Object.assign(config1,config2));

// object.setprototypeof 设置原型对象 object.getprototypeof
const school ={
    name: '哇哈哈'
}
const cities={
    xiaoqu: ['北京','伤害']
}
Object.setPrototypeOf(school,cities);
console.log(school);
</script>

es6的模块化

m1.js

//  分别暴露
 export let school = '哇哈哈';
export function teach(){
    console.log('我们可以教你');
}

m23,js

// 统一暴露
let school = '哇哈哈';
function findJob(){
    console.log('找工作');
}
export{school,findJob};

es学习.html

<script type="module">
    // 1.通用方式导入
    import * as m1 from "./m1.js";
    console.log(m1);
    import * as m23 from "./m23.js";
    console.log(m23);
    // 2.解构赋值形式
    import {school,teach} from "./m1.js";
    import{default as m23} from "./m23.js";
    // 简单方式
    import m3 from "./m23.js";
</script>

babel对es6模块化代码转化

<!-- 1.安装工具babel-cli babel-preset-env browserify(webpack) -->
<!-- 2.npx babel src/js -d dist/js -->
<!-- 3.打包npx browserify dist/js/app.js -o dist/bundle.js -->

引入npm包

npm i jquery;
import $ from 'jquery';
$('body').css('background','pink');
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值