差异性:WeakSet与Set类似,都是去重有序聚合数据。但有两点不同:
如果其它对象没有引用该对象,垃圾回收机制会自动回收该对象所占的内存,不会考虑该对象是否还在WeakSet对象中。 正是由于以上特性,WeakSet中的成员对象会随时消失(垃圾回收机制运行前后可能会不同)
语法:new WeakSet([iterable])
WeakSet 实例方法简表: 方法|说明 :-:|--- add() | 为WeakSet添加一个成员 delete() | 从WeakSet中删除一个成员 has() | 判断WeakSet中是否存在某个成员 b
注:正是由于WeakSet的弱引用特征,我们可以用它来存储dom,这样就不用担心DOM被页面中删除不会泄露在内存中的问题了。
创建weakset
//创建weakSet
let ws = new WeakSet([["1","2",3]])
let arr = [1,3,4]
// null也是不合法的
let ws2 = new WeakSet([[1,2],{color:"red"},()=>{},arr])
console.log(ws,ws2)
WeakSet的方法
//===添加
let arr = [1,3,4]
let ws2 = new WeakSet([[1,2],{color:"red"},()=>{},arr])
ws2.add(window).add(location)
console.log(ws2)
//删除
// let ws2 = new WeakSet([[1,2],{color:"red"},()=>{},arr])
console.log(ws2.delete(window))//true
console.log(ws2.delete(window))//false
//判断是否存在
console.log(ws2.has(window))//false
console.log(ws2.has(location))//true
console.log(ws2)
WeakSet垃圾回收机制
// 定义对象
// let ickt = [];
let ws = new WeakSet();
// 类
class Demo {
// 构造函数
constructor(color) {
this.color = color;
// 存储实例对象
// ickt.push(this)
// 用ws存储this就避免了对实例的引用
ws.add(this)
}
// 获取颜色方法
getColor() {
// if (ickt.indexOf(this) === -1) {
// // 抛出错误
// throw new Error('该对象不是Demo的实例,不能使用该方法')
// }
if (!ws.has(this)) {
// 抛出错误
throw new Error('该对象不是Demo的实例,不能使用该方法')
}
return this.color;
}
}
let d1 = new Demo('red')
let d2 = new Demo('green')
let obj = { color: 'pink' }
// 删除d2, d2原来的实例就应该被内存处理。但是没有处理
d2 = null;
// 获取颜色
console.log(d1.getColor());
// 让this指向d2
console.log(d1.getColor.call(d2));
// 让this指向obj
console.log(d1.getColor.call(obj));
作为一个前端开发,最常见的运行环境应该是浏览器吧,为了更好的通过浏览器把优秀的产品带给用户,也为了更好的发展自己的前端职业之路,有必要了解从我们在浏览器地址栏输入网址到看到页面这期间浏览器是如何进行工作的
javascript是一门单线程语言,Event Loop是javascript的执行机制.牢牢把握两个基本点,以认真学习javascript为中心,早日实现成为前端高手的伟大梦想!
钩子机制也叫hook机制,或者你可以把它理解成一种匹配机制,就是我们在代码中设置一些钩子,然后程序执行时自动去匹配这些钩子;这样做的好处就是提高了程序的执行效率,减少了if else 的使用同事优化代码结构
在讲小程序的更新机制之前,我们需要先了解小程序的2种启动模式,分别为:冷启动和热启动。小程序不同的启动方式,对应的更新情况不不一样的。无论冷启动,还是热启动。小程序都不会马上更新的,如果我们需要强制更新,需要如何实现呢?
JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。其JWT的组成:一个JWT实际上就是一个字符串,它由三部分组成,头部、载荷与签名。
本文介绍JavaScript运行机制,JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事。单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务。
现在有一个需求,前端有一个按钮,点击以后会调用后端一个接口,这个接口会根据用户的筛选条件去hadoop上跑任务,将图片的base64转为img然后打包成zip,生成一个下载连接返回给前端,弹出下载框。hadoop上的这个任务耗时比较久
js代码执行之前,浏览器首先会默认的把所有带var和function的进行提前的声明或者定义:1.理解声明和定义、2.对于带var和function关键字的在预解释的时候操作不一样的、3.预解释只发生在当前的作用域下
脚本执行js引擎都做了什么呢?1.语法分析 2.预编译 3.解释执行。在执行代码前,还有两个步骤;语法分析很简单,就是引擎检查你的代码有没有什么低级的语法错误 ,查找全局变量声明(包括隐式全局变量声明,省略var声明),变量名作全局对象的属性,值为undefined
以前对认证这方面的认识一直不太深刻,不清楚为什么需要token这种认证,为什么不简单使用session存储用户登录信息等。最近读了几篇大牛的博客才对认证机制方面有了进一步了解。
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!