ES6
文章平均质量分 68
叨唠
弘德、博学、敏行、敢先
展开
-
async await 和Promise的结合使用,Promise链解决循环异步请求,循环依次执行异步代码
需求分析当我们想依次执行多个异步请求时,或者实现setTimeout为setInterval时,可以使用Promise对象和async await关键字来实现该功能。尤其是,我们在使用node做网络爬虫时,需要进行大量的依次进行的异步请求。波及到的知识点如下:1、数组的reduce方法reduce()方法对数组中的每个元素执行一次处理函数,将其结果汇总为单个返回值。reduce详情:https://developer.mozilla.org/zh-CN/docs/Web/JavaS.原创 2021-04-25 19:58:42 · 1280 阅读 · 2 评论 -
遍历对象:一文搞懂for in、for of、Object.keys()、Object.getOwnPropertyNames()、Object.getOwnPropertySymbols()的区别
一、对象属性理解比如:数组中的length属性,描述符对象enumerable值为false,隐式属性。看下正常的数组和对象的属性: var arr = ["a", true, 3] var obj = { name: "zhu", age: 24 } console.log(arr) console.log(obj)二、关于遍历1、for...in循环原创 2020-10-21 17:03:33 · 765 阅读 · 0 评论 -
Proxy对象深入理解
Proxy对象用于定义基本操作的自定义行为(如属性查找、赋值、枚举、函数调用等)——代理对象。 let handler = { get: function (target, property, receiver) {}, set: function (target, property, value, receiver) {}, has: function (target, prop) {}, deleteProperty: function (t.原创 2020-11-10 16:33:35 · 1888 阅读 · 0 评论 -
ES6 class类的深入理解
class类的特点1、类实际上是个“特殊的函数”,就像你能够定义的函数表达式和函数声明一样,类语法有两个组成部分:类表达式和类声明。2、函数声明和类声明之间的一个重要区别是函数声明会提升,类声明不会。3、类必须使用new调用,否则会报错。函数作为构造函数,进行new创建对象,此时的函数还可以不用new 作为函数使用。但是class类,不能作为函数使用,new class就是来创建对象实例的。4、类的变量申明和具名表达式两种方式,都可以使用类。但是类的匿名表达式,由于没有类名,内部使用不了类。原创 2020-11-09 15:32:08 · 945 阅读 · 0 评论 -
ES6模块化——import和export
一、import1、静态import导入的js文件,在严格模式下运行静态的import语句用于导入由另一个模块导出的绑定。无论是否声明了strict mode,导入的模块都运行在严格模式下。2、type=“module”的默认加载方式为defer在浏览器中,import语句只能在声明了type="module"的script的标签中使用。type=“module”的加载方式默认使用 defer的加载方式。关于defer 和 async :defer和async 都是异步加...原创 2020-11-05 11:32:22 · 1058 阅读 · 3 评论 -
ES6拓展String
1、新增Unicode表示法ES6 加强了对 Unicode 的支持,允许采用\uxxxx形式表示一个字符,其中xxxx表示字符的 Unicode 码点。但是,这种表示法只限于码点在\u0000~\uFFFF之间的字符。超出这个范围的字符,必须用两个双字节的形式表示。基本汉字有20902字,范围:4E00-9FA5 var hanzi1 = "\u4E00" //一var hanzi2 = "\u9FA5" //龥console.log(hanzi1, hanzi2)参考:汉.原创 2020-10-26 17:31:11 · 126 阅读 · 0 评论 -
let与const的使用
一、let语句1、新增概念:块级作用域(全局作用域、函数作用域--局部作用域)let允许你声明一个作用域被限制在块级中的变量、语句或者表达式。与var关键字不同的是,var声明的变量只能是全局或者整个函数块的。var和let的不同之处在于后者是在编译时才初始化,没有预编译,var申明变量提升。比如 :if块中let a = 1;if(a){ var c = 3; let b = 2;}console.log(b);//b is not defined...原创 2020-10-26 15:39:18 · 325 阅读 · 0 评论 -
Generator生成器对象
生成器对象是由一个 generator function返回的,并且它符合可迭代协议和迭代器协议。function*这种声明方式(function关键字后跟一个星号)会定义一个生成器函数 (generator function),它返回一个 Generator对象要传递给函数的一个参数的名称,一个函数最多可以有255个参数。生成器函数在执行时能暂停,后面又能从暂停处继续执行。调用一个生成器函数并不会马上执行它里面的语句,而是返回一个这个生成器的 迭代器(iterator )对象...原创 2020-07-21 19:59:21 · 350 阅读 · 0 评论 -
async和await
async 用于申明一个 function 是异步的,并且返回一个Promise对象。而 await 用在async函数内,用于等待一个异步方法执行完成。async和await的目的是:让异步代码,在写法上实现真正的同步编程的风格,使得代码简洁,可读性高。看一个例子:function resolveAfter2Seconds() { return new Promise(resolve => { setTimeout(() => { resolve('resol原创 2020-07-18 16:02:57 · 778 阅读 · 0 评论 -
Promise处理异步操作
Promise对象用于表示一个异步操作的最终完成 (或失败), 及其结果值.我的理解:Promise使得异步的写法不像之前那样一直回调,而可以用同步的代码书写格式去写异步代码。事件队列:js是单线程语言,代码在执行的过程中,宏任务会直接依次执行下去,当遇到定时器或者ajax请求时,他们的处理事件,是要等一定的时间(条件)后,比如:定时器的时间到达,ajax请求成功或失败,此时将再将他们的处理事件添加到事件队列中,而代码在执行的过程中,也会有微任务,Promise的处理函数就是微任务,...原创 2020-07-16 20:31:44 · 2994 阅读 · 1 评论 -
Proxy和Reflect的理解
Proxy 对象用于定义基本操作的自定义行为(如属性查找、赋值、枚举、函数调用等)。接收两个参数:被代理者和处理代理的对象Proxy称为代理,当通过代理来操作被代理者时,会触发代理相关的代码;如果直接操作被代理者,不会触发代理相关代码。const handler = { get(target, prop, receiver){ console.log(target); 被代理者obj对象 {name: "zhu", age: 24} console.log(prop);原创 2020-07-14 20:08:01 · 2531 阅读 · 0 评论 -
ES6迭代协议——可迭代协议和迭代器协议
作为 ECMAScript 2015 的一组补充规范,迭代协议并不是新的内置实现或语法,而是协议。这些协议可以被任何遵循某些约定的对象来实现。可迭代协议:(for of循环)允许对象定义他的可迭代行为,比如在for of结构中,哪些值可以遍历到。在js中的某些类型是内置好的可迭代对象,比如:字符串、数组、类型数组、Map对象、Get对象等。而Object类型不可迭代。这些内置可迭代对象可以进行迭代的原因是内部实现了@@iterator 方法,即在该对象或该对象的原型链上有Symbol.iterato原创 2020-07-13 15:55:09 · 469 阅读 · 0 评论 -
迭代器和生成器
Interator对象1、Symbol.iterator属性为每一个对象定义了默认的迭代器。该迭代器可以被 for...of 循环使用。【终于明白了js的内置方法】属性指向一个方法,以数组来讲,大部分属性名和方法名是相同的,但也有例外,比如:constructor属性指向的是Array方法,Symbol.iterator属性指向的values方法数组原型上的构造函数constructor,指向Array方法,所以可以这么调用Array方法:2、可以调用for of的原因(1)字.原创 2020-07-10 16:59:53 · 179 阅读 · 0 评论 -
for of循环
for...of语句在可迭代对象(包括 Array,Map,Set,String,TypedArray,arguments对象等等)上创建一个迭代循环,调用自定义迭代钩子,并为每个不同属性的值执行语句Symbol.iterator为每一个对象定义了默认的迭代器。该迭代器可以被 for...of 循环使用。以下可以迭代的类型,都有Symbol.iterator属性。注意iterator接口可以调用next方法,与Symbol.iterator不同!!!一、可迭代类型1、迭代遍历数组...原创 2020-07-09 14:54:28 · 1117 阅读 · 0 评论 -
Set对象
1、Set对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。在 ECMAScript 2015规范中-0 0 +0 是完全相等的。NaN和undefined都可以被存储在Set 中,NaN之间被视为相同的值(NaN被认为是相同的,尽管 NaN !== NaN)。引用值地址不能相同,原始值不能相等,这才能确保值的唯一性。2、方法(1)add方法add方法返回该Set对象,所以可以链式调用 let arr = [3,4]; let m...原创 2020-07-08 17:31:40 · 1258 阅读 · 0 评论 -
Map对象
Map对象 兼容性ES6 Edge12Map对象保存键值对,并且能够记住键的原始插入顺序。任何值(对象或者原始值) 都可以作为一个键或一个值。一个Map对象在迭代时会根据对象中元素的插入顺序来进行— 一个 for...of循环在每次迭代后会返回一个形式为[key,value]的数组。1、set方法赋值(1)set()方法为Map对象添加或更新一个指定了键(key)和值(value)的(新)键值对。(2)因为 Set() 方法返回 Map 对象本身,所以你可以像下面这...原创 2020-07-08 16:25:03 · 3666 阅读 · 0 评论 -
ES6 super
我理解的super:重点看例子中备注(1)constructor构造函数内容的两种写法(2)constructor内的this指代调用者,类调用,指向该类的实例,子类调用,指向子类的实例(3)父类的所有内容都被继承到子类对应的位置。父类中普通方法和属性,在父类的原型上,被子类原型继承。父类中的静态方法和静态属性,在父类上,被子类继承。(4)子类中constructor,在使用this前,必须先执行一下super()方法,执行父类的constructor函数,之后子类的constructor才原创 2020-07-02 14:11:51 · 180 阅读 · 0 评论 -
ES6 class类的继承
类的继承:extends关键字用于类声明或者类表达式中,以创建一个类,该类是另一个类的子类。extends关键字用来创建一个普通类或者内建对象的子类。继承一个类: class Foo { constructor(){ this.a = 1; } func1(){ console.log("func1"); } } class Bar extends Foo{原创 2020-07-01 15:04:39 · 195 阅读 · 1 评论 -
ES6 class类
类实际上是个“特殊的函数”,就像你能够定义的函数表达式和函数声明一样,类语法有两个组成部分:类表达式和类声明。函数声明和类声明之间的一个重要区别是函数声明会提升,类声明不会。类中定义的方法,在原型prototype上,类中constructor构造函数定义的方法和属性 是实例对象的 class Foo { constructor(){ this.a = 1; this.b = 2; } fun原创 2020-06-28 17:04:09 · 254 阅读 · 0 评论 -
Symbol类型
symbol是一种基本数据类型 (primitive data type)。每个从Symbol()返回的symbol值都是唯一的。不支持语法:"new Symbol()":从 ECMAScript 6 开始不再被支持原始数据类型创建一个显式包装器对象。 然而,现有的原始包装器对象,如new Boolean、new String以及new Number,因为遗留原因仍可被创建。所以目前只有Symbol类型不能创建包装器对象。直接使用Symbol()创建新的symbol类型,并用一个可选的字符...原创 2020-06-23 14:33:27 · 1891 阅读 · 0 评论 -
ES6箭头函数
箭头函数1、箭头函数是匿名函数JS 中的箭头函数是匿名(anonymous)的,函数的name属性是空字符。2、箭头函数没有自己的this,arguments,super或new.target,没有原型prototype,不能new对象。如果你在箭头函数引用了this、arguments或者参数之外的变量,那它们一定不是箭头函数本身包含的,而是从父级作用域继承的。3、箭头函数不支持new.targetnew.target是ES6新引入的属性,普通函数如果通过new调用,new.tar原创 2020-06-12 17:09:33 · 228 阅读 · 0 评论 -
ES6函数传参——默认参数和剩余参数
一、默认参数1、只有在未传递参数,或者参数为 undefined 时,才会使用默认参数,null 值被认为是有效的值传递。即使显式的传入undefined(虽然不是null或其他falsy值),但是形参的值还是默认值。2、调用时解析在函数被调用时,参数默认值会被解析,比如:function append(value, array = []) { array.push(value); return array;}append(1); //[1]append(2); //[原创 2020-06-11 00:03:13 · 2105 阅读 · 0 评论 -
解构赋值原理
ES6变量的解构赋值本质上是“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予匹配的右边的值,如果匹配不成功变量的值就等于undefinedES6中只要某种数据有Iterator接口(也就是可以循环迭代 Iterable对象),都可以进行数组的解构赋值数组解构Iterable对象解构字符串:Set对象Map对象let map = new Map();map.set("a",1) .set("b",2) .set("c",3);let [[x,m],[y原创 2020-07-28 10:21:40 · 972 阅读 · 0 评论