ES6——再不学就晚了

2024-01-16 22:08
文章标签 frontend es6 不学

本文主要是介绍ES6——再不学就晚了,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 一、异步与等待
    • 1、关键字async
    • 2、await
  • 二、Symbol
  • 三、迭代器
  • 四、生成器
  • 五、代理prxoy
      • 数据的双向绑定
  • 思维导图
  • 总结


前言

昨天发布文章后,已是深夜,加上一些工作,脑袋里已经是一团浆糊,今天回顾文章,发现少了一些内容,现在就补充上。抱歉!!

ES6基础链接: http://t.csdn.cn/5fafx.
ES6进阶链接 :http://t.csdn.cn/76sGP.


一、异步与等待

1、关键字async

语法

async function name([param[, param[, … param]]]) { statements }

  • name: 函数名称。
  • param: 要传递给函数的参数的名称。
  • statements: 函数体语句。

返回值

async 函数返回一个 Promise 对象,可以使用 then 方法添加回调函数。

代码如下:

 // 用asyc 装饰函数 返回的是promise对象async function say(){return "你好ES6"}say().then(res=>console.log(res))

async 函数中可能会有 await 表达式,async 函数执行时,如果遇到 await 就会先暂停执行 ,等到触发的异步操作完成后,恢复 async 函数的执行并返回解析值。

2、await

语法

[return_value] = await expression;

  • expression: 一个 Promise 对象或者任何要等待的值。

返回值

返回 Promise 对象的处理结果。如果等待的不是 Promise 对象,则返回该值本身。
如果一个 Promise 被传递给一个 await 操作符,await 将等待 Promise 正常处理完成并返回其处理结果。

注意

await 关键字仅在 async function 中有效。如果在 async function 函数体外使用 await ,你只会得到一个语法错误。

代码如下:

// awiat 只能在aync函数里面function say(msg,time){return new Promise((resolve,reject)=>{setTimeout(()=>resolve(msg),time)})}// 2秒后说你好// 3秒后说我很中意你// 定义async函数async function doit(){// await会等待say函数执行完才会向下执行var s1 = await say("你好",2000);console.log(s1);var s2 = await say("我很中意你",5000);console.log(s2);return s1+s2;}doit().then(res=>console.log(res))

二、Symbol

概述
ES6 引入了一种新的原始数据类型 Symbol ,表示独一无二的值,最大的用法是用来定义对象的唯一属性名。

ES6 数据类型除了 Number 、 String 、 Boolean 、 Object、 null 和 undefined ,还新增了 Symbol 。
用法

由于每一个 Symbol 的值都是不相等的,所以 Symbol 作为对象的属性名,可以保证属性不重名。

代码如下:

 // 唯一的,不可变的var sym = Symbol("内容");console.log(sym,typeof sym);var obj= {sym:"abc"};

三、迭代器

作用

可迭代对象都拥有迭代器(可以被for of 遍历对象都是可迭代对象) String Array Set Map

代码如下:

//获取迭代对象
var itr = arr[Symbol.iterator]()
//通过next方法进行迭代
itr.next(){value:"xxx",done:false}
.....
{value:undefined,done:true}
var arr = [2,6,8];
// 获取数组的迭代器
var iter = arr[Symbol.iterator]();
// iter.next(); //{value: 6, done: false}
// ...
// iter.next();//{value: undefined, done: true}

四、生成器

概述
跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。

代码如下:

function *gen(){// 当生成器函数语言的yield 函数就会暂停,返回值yield "小赵";yield "小今";yield "小麦";}// 执行完毕生成的是迭代器var list = gen();// list.next();// 可以通过next方法获取yield返回的值和状态// 遍历迭代器for(let v of list){console.log(v)

案例
代码如下:

// 写一个生成器,range 参数start= 1,end=100;// 创建一个出一可以迭代start 到end数function *range(start,end,step){while(start<end){yield start;start+=step;}}var list = range(2,101,2);// var arr = Array.from(list);var arr = [...list];console.log(arr)// range 产生由start到end的一个可以迭代对象for(var v of list){console.log(v);}

五、代理prxoy

代码如下:

// 代理就是对原有对象target 二次加工var obj = {"name":"mumu",age:18};// 用o来代理objvar o = new Proxy(obj,{// 当获取o对象的属性值执行get方法get:function(target,prop){// 如果属性名在原对象里面if(prop in target){// 返回原对象属性return target[prop]						}else{// 否则返回 "我檫return "属性名错了";}},set:function(target,prop,value){if(prop==="age"){if(value>200||value<0){// 发送一个(范围)错误throw RangeError('这个年龄恐怕不是人类!')}else{target[prop] = value;}}else{target[prop] = value;}}})	 // 通过o代理obj 实现对 obj对象的劫持

数据的双向绑定

HTML代码如下:

<input type="text" id="inp">
<p id="myp"></p>

JS代码如下:

// 获取两个节点var inp = document.getElementById("inp");var myp = document.getElementById("myp");// 定义对象objvar obj = {msg: "我喜欢Vue"};// 使用代理劫持objvar o = new Proxy(obj, {// get劫持get(target, prop) {return target[prop]},// 设置值 o.msg = "abc" 会触发set// target obj对象 ;prop msg  ;value "abc";set(target, prop, value) {// 只要被设置 value会输出// console.log(value);if(prop==="msg"){// 更新myp.innerText = value;inp.value = value;}target[prop] = value;}})// 设置节点的值或者文本inp.value = o.msg;myp.innerText = o.msg;// 目标:当input发生变化时候,p的内容也要跟随变化// 给inp表单添加input事件修改o.msg的值inp.oninput = function(){o.msg = inp.value}

思维导图

在这里插入图片描述


总结

以上就是 ES6 最常用的一些语法。如果有错误望指正,以后将持续更新。
  • 创作不易,深夜肝文,如果对大家有帮助,还请大家支持一波~
  • 点赞,关注,收藏走一波,感激不尽!
  • 好人一生平安,一胎生八个

这篇关于ES6——再不学就晚了的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/614046

相关文章

HTML5中的Microdata与历史记录管理详解

《HTML5中的Microdata与历史记录管理详解》Microdata作为HTML5新增的一个特性,它允许开发者在HTML文档中添加更多的语义信息,以便于搜索引擎和浏览器更好地理解页面内容,本文将探... 目录html5中的Mijscrodata与历史记录管理背景简介html5中的Microdata使用M

html5的响应式布局的方法示例详解

《html5的响应式布局的方法示例详解》:本文主要介绍了HTML5中使用媒体查询和Flexbox进行响应式布局的方法,简要介绍了CSSGrid布局的基础知识和如何实现自动换行的网格布局,详细内容请阅读本文,希望能对你有所帮助... 一 使用媒体查询响应式布局        使用的参数@media这是常用的

HTML5表格语法格式详解

《HTML5表格语法格式详解》在HTML语法中,表格主要通过table、tr和td3个标签构成,本文通过实例代码讲解HTML5表格语法格式,感兴趣的朋友一起看看吧... 目录一、表格1.表格语法格式2.表格属性 3.例子二、不规则表格1.跨行2.跨列3.例子一、表格在html语法中,表格主要通过< tab

Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案

《Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案》:本文主要介绍Vue3组件中getCurrentInstance()获取App实例,但是返回nu... 目录vue3组件中getCurrentInstajavascriptnce()获取App实例,但是返回n

JS+HTML实现在线图片水印添加工具

《JS+HTML实现在线图片水印添加工具》在社交媒体和内容创作日益频繁的今天,如何保护原创内容、展示品牌身份成了一个不得不面对的问题,本文将实现一个完全基于HTML+CSS构建的现代化图片水印在线工具... 目录概述功能亮点使用方法技术解析延伸思考运行效果项目源码下载总结概述在社交媒体和内容创作日益频繁的

前端CSS Grid 布局示例详解

《前端CSSGrid布局示例详解》CSSGrid是一种二维布局系统,可以同时控制行和列,相比Flex(一维布局),更适合用在整体页面布局或复杂模块结构中,:本文主要介绍前端CSSGri... 目录css Grid 布局详解(通俗易懂版)一、概述二、基础概念三、创建 Grid 容器四、定义网格行和列五、设置行

前端下载文件时如何后端返回的文件流一些常见方法

《前端下载文件时如何后端返回的文件流一些常见方法》:本文主要介绍前端下载文件时如何后端返回的文件流一些常见方法,包括使用Blob和URL.createObjectURL创建下载链接,以及处理带有C... 目录1. 使用 Blob 和 URL.createObjectURL 创建下载链接例子:使用 Blob

Vuex Actions多参数传递的解决方案

《VuexActions多参数传递的解决方案》在Vuex中,actions的设计默认只支持单个参数传递,这有时会限制我们的使用场景,下面我将详细介绍几种处理多参数传递的解决方案,从基础到高级,... 目录一、对象封装法(推荐)二、参数解构法三、柯里化函数法四、Payload 工厂函数五、TypeScript

Vue3使用router,params传参为空问题

《Vue3使用router,params传参为空问题》:本文主要介绍Vue3使用router,params传参为空问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录vue3使用China编程router,params传参为空1.使用query方式传参2.使用 Histo

CSS Padding 和 Margin 区别全解析

《CSSPadding和Margin区别全解析》CSS中的padding和margin是两个非常基础且重要的属性,它们用于控制元素周围的空白区域,本文将详细介绍padding和... 目录css Padding 和 Margin 全解析1. Padding: 内边距2. Margin: 外边距3. Padd