ES6学习笔记(第四天)

ES6学习笔记(第四天)

1.模块化

模块化是指将一个大的程序文件,拆分成许多小的文件,然后将小文件组合起来。
好处:
(1) 防止命名冲突
(2) 代码复用
(3) 高维护性
ES6 模块化语法
模块功能主要由两个命令构成:export 和 import。
⚫ export 命令用于规定模块的对外接口
⚫ import 命令用于输入其他模块提供的功能

暴露方式:

//准备一个模块文件m.js
//通过export向外暴露
//方式一:分别暴露
export let name="wangwenhui"
export function send(){
    console.log("发微信");
}
//方式二:统一暴露
 let name="wangwenhui"
 function send(){
    console.log("发微信");
}
export{name,send}
//方式三:默认暴露(export default 直接加想暴露的数据,任意类型,字符串/对象比较多)
//返回的是一个对象,对象里面的default属性存着name,send
//如:console.log(m1.name);//wangwenhui
export default{
    name:"wangwenhui",
    send:function() {
       console.log("发微信");
       }
   }
//另外一个文件想使用模块里的内容
<script type="module">
    //引入m.js模块内容
    import *as m1 from "./m.js";
    console.log(m1.name);//wangwenhui
</script>

直接在引入模块方式:

<script type="module">

//方式一:通用的引入方式(那种暴露方式都可以用)
    import *as m1 from "./m.js";

//方式二:解构赋值形式
//分别暴露和统一暴露都可以这样
import{name,send}from "./m.js"
//但是默认暴露一定要给default起一个别名
import{default as m2}from "./m.js"
console.log(m2)//{name: 'wangwenhui', send: ƒ}

//方式三:简便形式(只针对默认暴露)
import m from "./m.js"
console.log(m);//{name: 'wangwenhui', send: ƒ}

</script>

在入口文件引入模块,再在HTML文件引入入口文件,进而引入模块是方式(这种方式有兼容性的问题)

//在一个入口文件app.js中引入模块
    import *as m1 from "./m.js";
    console.log(m1);
//在html文件中引入入口文件
    <script src="./app.js" type="module">

Babel引入方式(一个javascript编译器)
实际工作中一般用Webpack

   <!-- 
        1. 安装工具 npm i babel-cli babel-preset-env browserify(webpack) -D
        2. 编译 npx babel src/js -d dist/js --presets=babel-preset-env
        3. 打包 npx browserify dist/js/app.js -o dist/bundle.js
     -->
     <script src="dist/bundle.js"></script>

2.ES7的新特性

(1)Array.prototype.includes
Includes 方法用来检测数组中是否包含某个元素,返回布尔类型值

var arr=['a','b','c']
console.log(arr.includes('a'));//true
console.log(arr.includes('d'));//false

(2)指数操作符
在 ES7 中引入指数运算符「**」,用来实现幂运算,功能与 Math.pow 结果相同

console.log(2**10);//1024
console.log(Math.pow(2,10));//1024

3.ES8的新特性

async 和 await 两种语法结合可以让异步代码像同步代码一样

3.1 async函数

(1) async 函数的返回值为 promise 对象,
(2) promise 对象的结果由 async 函数执行的返回值决定

        //正常函数前加一个async就变成了async 函数
        async function fn(){
            // 返回一个字符串
            // return '尚硅谷';
            // 返回的结果不是一个 Promise 类型的对象, 返回的结果就是成功 Promise 对象
            // return;
            //抛出错误, 返回的结果是一个失败的 Promise
            // throw new Error('出错啦!');
            //返回的结果如果是一个 Promise 对象
            return new Promise((resolve, reject)=>{
                resolve('成功的数据');
                // reject("失败的错误");
            });
        }

        const result = fn();
        console.log(result);

3.2 await函数

(1) await 必须写在 async 函数中
(2) await 右侧的表达式一般为 promise 对象
(3) await 返回的是 promise 成功的值
(4) await 的 promise 失败了, 就会抛出异常, 需要通过 try…catch 捕获处理

        //创建 promise 对象
        const p = new Promise((resolve, reject) => {
            // resolve("用户数据");
            reject("失败啦!");
        })

        // await 要放在 async 函数中.
        async function main() {
            //Promise失败
            try {
                let result = await p;
                //
                console.log(result);//用户数据
            } catch (e) {
                console.log(e);//失败啦!
            }
        }
        //调用函数
        main();

3.3 对象方法的扩展

(1) Object.values()方法返回一个给定对象的所有可枚举属性值的数组
(2) Object.entries()方法返回一个给定对象自身可遍历属性 [key,value] 的数组
(3) Object.getOwnPropertyDescriptors
该方法返回指定对象所有自身属性的描述对象

 //声明对象
        const school = {
            name:"wangwenhui",
            cities:['北京','上海','深圳'],
            xueke: ['前端','Java','机器学习','C++']
        };

        //获取对象所有的键
        console.log(Object.keys(school));//['name', 'cities', 'xueke']
        //获取对象所有的值
        console.log(Object.values(school));// ['wangwenhui', Array(3), Array(4)]
        //entries返回一个数组
         console.log(Object.entries(school));

        //对象属性的描述对象
        console.log(Object.getOwnPropertyDescriptors(school));
                                //原型对象,描述对象
        const obj = Object.create(null, {
            //Object.getOwnPropertyDescriptors()返回的就是类似这个的描述对象
            name: {
                //设置值
                value: 'wangwenhui',
                //属性特性
                writable: true,  //是否可写
                configurable: true, //是否可以删除
                enumerable: true    //是否可以枚举
            } 
        });
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值