一周掘金

100 阅读7分钟

1月19号掘金 一、新增的方法
object.is()方法来解决“===”中一些恒等中的缺点
object.is(100, '100') false,必须恒等
object.is({}, {}) false,指向不同
object.is(+0,-0) false
object.is(NaN, NaN) true
object.is(NaN === NaN) false
(+0 === -0) true\

object.assign()方法可以合并指定对象至目标对象内部
...传参,合并所有对象,返回给参数一的目标对象
第一个对象得到合并后结果 如果属性相同,后面的源对象内容会覆盖之前的属性值
如果直接传非对象内容,会转换为对象
如果传入的是undefined和null会报错\

object.getPrototypeOf()和object.setPrototypeof()方法
是以obj对象为原型
检测obj是否是f的原型对象
输出原型对象的fn
设置f的原型对象为obj2
super关键字用于原型中方法的继承功能,可以解决原型对象有自己的返回值时覆盖原有的返回值
可以设置obj是f的原型,还可以在设置以f为原型

1月20日掘金 一、Symbol类型
Symbol的基础数据类型,表示独一无二的值类似于id
创建Symbol通过函数Symbol()完整可以传递参数,也可以为空
不支持new Symbol()
在Symbol()函数中参数是对变量的描述,程序无法访问,只能日志打印
创建两个Symbol类型的变量,可以验证它们独一无二的特性
有没有参数,或参数是否相同都不恒等 因为Symbol是唯一存在的
Symbol类型变量无法进行隐式转换可显式,需要提前显示转换匹配的类型\

二、Symbol属性
由于Symbol类型是独一无二的值,作为对象属性就具有唯一性不出现重名
对于多模块、多人开发或者拼装属性名的情况下,有可能会出现属性名重复
重名的属性名不会报错,会被覆盖
拼装的属性名,也会被覆盖
属性名不是name,而是[Symbol(name)],需要加Symbol,参数name要不要都无所谓
方法名也可以使用Symbol类型
let fn = Symbol('fn'); let obj = { fn { return 'fn'; } }

1月21日掘金 一、Set数据集合
Set集合是一种无重复元素的列表,使用new Set()方法创建Set集合
向集合添加5个元素,只有四个有效,并且2和字符串‘2’不冲突,空对象也不冲突
我们可以通过构造函数传递参数的方式进行初始化集合,比如接受一个数组
通过构造参数初始化集合
使用has()方法查找是否存在指定元素,注意2和‘2’是两个元素,不会隐式转换
还可以使用delete()删除指定元素、clear()清空元素
可以使用...语法,将Set集合转换为数组
可以使用for或者forEach来遍历Set集合
Set集合还提供针对对象的Weak Set集合,添加非对象类型会报错
Weak Set集合支持add()、has()和delete()方法
Weak Set不支持遍历,内部隐藏(无法查看内容),不支持foreach和size\

1月22日掘金 一、Map数据集合
Map数据集合,是一种以键值对存储的有序列表
.set添加,支持.set(...).set(...)
.get获取
可以通过构造函数传递参数的方式进行初始化集合,比如接受一个数组
使用has()检测、delete()删除、clear()清空等对Map集合的操作
可以使用forEach来遍历Map集合
Map集合还提供了针对对象的Weak map集合,添加非对象类型会报错
Weak Map不支持遍历,内部隐藏(无法查看内容),不支持foreach和size\

1月23日掘金 一、迭代器和生成器
迭代器(Iterator),用于给数据结构提供统一的访问遍历的机制
创建一个生成器方法,方法名前面加上*,迭代的内容之前使用yield
迭代器对象.next()方法,类似指针,每次执行将下移一行
每执行一次.next()将下移一行
属性value得到值,没有返回undefined,当没有值了,done则返回true
生成器结合循环语句,并且进行传递数组进行迭代
作为匿名函数使用:let cit = function *(items);\

二、默认迭代接口
最简单的迭代方式是使用for...of迭代语句去遍历即可
对于Array数组类型有关的三个方法:keys()、values()和entries();
for...of遍历可以得到value值
for...of特别方便,想用.next()语法也可以

1月24日掘金 一、异步promise介绍
promise:即异步通信编程的一种解决方案,它比传统回调式更加强大
创建一个promise实例
一顿异步通信操作后,返回成功或失败
然后判断成功或失败去执行resolve或reject
then方法可执行resolve的回调函数
catch方法可执行reject的回调函数
通过then和catch可以把多层嵌套的回调函数给分离出来
p作为Promise实例,可以进行连缀链式操作
当执行了then方法后,本身依旧返回了当前的Promise实例
构造函数方法的两个参数去执行回调函数,并传递参数
catch()方法还可以作为then第二个参数存在,进行多层回调
Promise异步执行顺序:
1.模拟异步1
2.模拟异步2
3.模拟异步3
不管怎么调节,最终输出结果是:2,3,1,需求顺序是:1,2,3
通过Promise改装
Promise((resolve, reject) => {})\

1月25日掘金 一、Promise状态特点
三种状态:
(1).Pending(进行中)
(2).Fulfilled(已成功)
(3).Rejected(已失败)
当异步操作执行后,得到的结果来决定其状态,其他任何操作都无法改变
Promise状态只有两种运行方法:从Pending到Fulfilled或Rejected
当状态固定好后,就变成了Resolved(已完成)
Pending->Resolve方法->fulfilled->resolved
Pending->reject方法->rejected->resolved\

Promise的all()方法,可以简化多个实例调用输出排序
数组元素即输出顺序,Promise实例的回调组合成数组输出
Promise的race()方法,只输出第一个改变状态的实例
Promise的resolve()和reject(),直接返回一个成功或失败的实例
Promise.resolve(0)强制类型一致保持程序正确性\

1月26日掘金 一、代理Proxy
给目标对象封装一层拦截,外界访问必须先通过这层拦截
创建一个代理,参数1拦截的目标对象,参数2拦截行为
参数2如果是空对象,代理直接会调用目标对象
get方法用于拦截某个属性的读取操作
这里直接return,通过代理对象无论访问目标对象的任何属性都是fail
代理访问name为fail
如果想要代理对象公布出合适的信息,可以通过get()两个参数来实现
通过属性判断,可以获取目标对象属性的值,并且还可以各种操作,如验证、修改等
也可以通过set()方法来对代理对象的属性进行赋值,有三个参数
set还可以拦截某个属性的赋值操作
通过代理对象对属性赋值,目标对象属性也被更改
代理不是复制克隆目标对象,只是拦截目标对象更改默认行为
可以使用set()和get()方法,对目标对象的数据进行过滤和验证
代理对象中任何未公开或不存在的属性,可自定义返回内容
也可以阻止赋值的默认行为\