이 글은 약한 매핑과 약한 컬렉션과 관련된 문제를 주로 소개하는 javascript에 대한 관련 지식을 함께 살펴보겠습니다.
[관련 권장 사항: javascript 비디오 튜토리얼, web front-end]
간단히 말하면, 변수나 객체가 "접근할 수 없는" 경우 이 변수나 객체가 계속해서 작동할 필요가 없습니다. 메모리에 저장되고 재활용되어야 합니다.
예:
let xiaoming = {name:'xiaoming'}//创建一个对象,并用变量xiaoming引用 xiaoming = null //将变量xiaoming置空,从而使对象{name:'xiaoming'}不可达 //{name:'xiaoming'}对象被回收
객체가 배열 및 다른 객체에 의해 참조되는 경우 해당 객체가 배열을 참조하고 객체가 배열에 존재하는 한 이 객체도 도달 가능한 것으로 간주됩니다.
배열의 개체:
let xiaoming = {name:'xiaoming'} let arr = [xiaoming] xiaoming = null //将变量xiaoming置空 //对象{name:'xiaoming'}由于存在于数组中,并不会被释放
마찬가지로 개체를 Map
의 키로 사용하는 경우 Map
이 존재하면 해당 개체는 다음에서 재활용되지 않습니다. 엔진. Map
的键,如果Map
存在,那么对象就不会被引擎回收。
Map
中的键对象:
let xiaoming = {name:'xiaoming'} let map = new Map() map.set(xiaoming,'a boy') xiaoming = null //将变量xiaoming置空 //对象{name:'xiaoming'}由于是map的键,并不会被释放
WeapMap
在释放键对象的处理上和Map
有着本质上的不同,简单来讲,WeapMap
不会因为对象作为键而阻止垃圾回收。
WeakMap
WeakMap
和Map
的区别可分为三个方面:
-
WeakMap
只能以对象作为键
let weakMap = new WeakMap() let obj = {name:'obj'} weakMap.set(obj,'obj as the key') weakMap.set('str','str as the key')//报错
代码执行结果如下:
可见,当我们使用字符串作为key
时,程序不能正常执行。
- 不阻止引擎对键(对象)的回收
也就是说,如果一个对象除了WeakMap
的引用之外没有其他引用,那么这个对象就会被系统回收。
举个例子:
let weakMap = new WeakMap() let obj = {name:'obj'} weakMap.set(obj,'obj as the key') obj = null //将变量obj置空 //此时,对象{name:'obj'}就会被回收
-
WeakMap
支持的方法有限
-
WeakMap
不支持迭代 -
WeakMap
不支持keys()
-
WeakMap
不支持values()
-
WeakMap
不支持entires()
所以,我们没有办法获得所有的键值对。
WeakMap
只能使用如下方法:
-
weakMap.get(key)
获取键值对 -
weakMap.set(key,val)
设置键值对 -
weakMap.delete(key)
删除键值对 -
weakMap.has(key)
判断是否存在
之所以要限制WeakMap
的数据访问方式,是因为JavaScript
引擎释放对象的时机是无法确定的。
当一个对象失去了所有的引用之后,JavaScript
引擎有可能会立即释放对象占用的空间,也有可能再等一等。
所以,在某一时刻,WeakMap
的元素数量是不能确定的。(试想一下,如果一个对象在失去所有的引用之后,我们遍历WeakMap
的元素,可能会得到不同的结果。)
WeakMap使用案例
WeakMap
的应用场景通常是存储一个“属于”对象的数据,当这个对象不存在时,“属于”这个对象的数据也应该随之释放。
有一个非常适合使用WeakMap`的历史故事:“狡兔死,走狗烹;飞鸟尽,良弓藏”。
如果我们用JavaScript
代码描述这个故事,就应该用WeakMap
:
let weakMap = new WeakMap() let rabbit = {name:'rabbit'} //狡兔 let runDog = {name:'runDog'} //走狗 let flyBird = {name:'flyBird'} //飞鸟 let goodBow = {name:'goodBow'} //良弓 weakMap.set(rabbit,runDog) weakMap.set(flyBird,goodBow) rabbit = null //狡兔死 flyBird = null //飞鸟尽 //随即,走狗和良弓都会被释放,也可能不是立刻就释放 //这个故事告诉我们,当走狗没有啥好下场,可能不是立刻就被 //弄死了,但是迟早要弄死
WeakSet
和Set
相比,WeakSet
有以下不同点:
-
WeakSet
只能添加对象元素 -
WeakSet
不阻止系统对元素的回收 -
WeakSet
支持add()
、has()
、delete()
-
WeakSet
不支持size
属性和keys()
方法
我们可以用WeakMap
来验证一些存在性信息,或者验证"是/否"等状态,例如,我们可以使用WeakMap
判断用户是否在线:
let onlineUser = new WeakMap() let zhangSan = {name:'张三'} let liSi = {name:'李四'} let wangEr = {name:'王二'} let maZi = {name:'麻子'} function login(user){ ... ... onlineUser.add(user) } //判断用户是否在线 function isOnline(user){ return onlineUser.has(user) }
WeakMap
和WeakSet
Map
의 핵심 개체: 🎜rrreee🎜WeapMap
은 간단히 말해서 핵심 개체 해제 처리에 있어서 Map
과 근본적으로 다릅니다. 즉, WeapMap
은 객체를 키로 사용하기 때문에 가비지 수집을 방지하지 않습니다. 🎜WeakMap
🎜WeakMap
과 Map
의 차이점은 세 가지 측면으로 나눌 수 있습니다: 🎜WeakMap code >객체만 키로 사용할 수 있습니다.

키
로 사용하면 프로그램이 정상적으로 실행되지 않는 것을 볼 수 있습니다. 🎜- 엔진이 키(객체)를 재활용하는 것을 막지 않습니다.
WeakMap 다른 참조가 없으면 시스템에서 객체를 재활용합니다. 🎜🎜예: 🎜rrreee<ol start="3"><li>
<code>WeakMap
은 제한된 메서드를 지원합니다.
-
WeakMap
반복은 지원되지 않습니다. -
WeakMap
은 지원되지 않습니다.keys()
-
WeakMap
은 지원되지 않습니다 지원되는values()
-
WeakMap
은entires()
WeakMap
은 다음 메소드만 사용할 수 있습니다: 🎜-
weakMap.get(key)
키-값 쌍 가져오기 - WeakMap.set(key,val)
weakMap.delete(key)
키-값 쌍 삭제weakMap.has(key)
존재 여부 확인WeakMap
의 데이터 접근 방식을 제한해야 하는 이유는 다음과 같습니다. JavaScript
엔진 개체를 해제하는 시점을 결정할 수 없습니다. 🎜🎜객체가 모든 참조를 잃으면 JavaScript
엔진은 객체가 차지한 공간을 즉시 해제하거나 잠시 기다릴 수 있습니다. 🎜🎜그래서 특정 순간에 WeakMap
의 요소 수를 확인할 수 없습니다. (객체가 모든 참조를 잃은 후 WeakMap
의 요소를 순회하면 다른 결과를 얻을 수 있다고 상상해 보세요.) 🎜WeakMap 사용 사례
🎜 애플리케이션 시나리오 WeakMap
은 일반적으로 개체에 "속하는" 데이터를 저장하는 데 사용됩니다. 개체가 존재하지 않으면 개체에 "속하는" 데이터도 해제되어야 합니다. 🎜🎜WeakMap`을 사용하기에 매우 적합한 역사적인 이야기가 있습니다. "교활한 토끼가 죽으면 부족한 것이 요리되고 새가 사라지면 좋은 활이 숨겨집니다." 🎜🎜이 스토리를 설명하기 위해 JavaScript
코드를 사용하는 경우 WeakMap
:🎜rrreeeWeakSet
🎜 및Set
를 사용해야 합니다. > WeakSet
과 비교하면 다음과 같은 차이점이 있습니다. 🎜-
WeakSet
는 객체 요소만 추가할 수 있습니다. WeakSet시스템이 요소를 재활용하는 것을 막지 않습니다.
-
WeakSet
는add()
,has()
를 지원합니다. delete() -
WeakSet
는size
속성과keys()
메서드를 지원하지 않습니다. ol>🎜 -
WeakMap
은 키에 대한 모든 외부 참조가 손실된 경우에만 개체를 사용할 수 있습니다(WeakMap
을 제외한 다른 변수는 키 개체를 참조하지 않음). code >WeakMap은 엔진이 키 값을 재활용하는 것을 방지하지 않습니다. 재활용되면WeakMap
에 해당하는 요소는 더 이상 존재하지 않습니다. -
WeakSet
只能存储对象,一旦对象元素丢失外部所有的引用(除了WeakSet
以外,没有别的变量引用元素对象),WeakSet
不会阻止引擎对元素的回收。一经回收,WeakSet
中对应的元素就消失了。 - 它们共同的优点是,可以在合适的场景中降低对象对内存的占用。
- 不支持
clear()
、size
、keys()
、values()
等方法
WeakMap
을 사용하여 일부 존재 정보를 확인하거나 "예/아니요"와 같은 상태를 확인할 수 있습니다. 예를 들어 WeakMap
을 사용할 수 있습니다. > 사용자가 온라인인지 확인하려면: 🎜 rrreee🎜 WeakMap
및 WeakSet
의 제한은 모든 요소를 한 번에 반복하고 얻을 수 없다는 점이며 이는 중요한 요소에 영향을 미치지 않습니다. 매우 중요한 장소에서 역할을 수행합니다. 🎜Summary
WeakMap
只能以对象作为键,当键的所有外部引用丢失后(除了WeakMap
以外没有别的变量引用键对象),WeakMap
不会阻止引擎对键值的回收。一经回收,WeakMap
对应的元素就不存在了。WeakMap
和WeakSet
WeakSet
는 객체만 저장할 수 있습니다. 객체 요소가 모든 외부 참조를 잃으면(WeakSet
제외, 다른 변수는 요소 객체를 참조하지 않음) WeakSet
는 엔진이 요소를 재활용하는 것을 방지하지 않습니다. 재활용되면 WeakSet
의 해당 요소가 사라집니다.
clear()
, size
, keys()
, values()
및 values()
를 지원하지 않습니다. 다른 방법
WeakMap
및 WeakSet
은 "기본" 개체가 손실되면 "기본" 개체와 관련된 데이터 구조를 저장하는 데 자주 사용됩니다. 그 의미는 해당 연관 데이터 구조가 자연스럽게 삭제된다는 것입니다. 【관련 추천: javascript 비디오 튜토리얼, 🎜web front-end🎜】🎜위 내용은 JavaScript 약한 매핑 및 약한 수집 지식에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于BOM操作的相关问题,包括了window对象的常见事件、JavaScript执行机制等等相关内容,下面一起来看一下,希望对大家有帮助。

foreach不是es6的方法。foreach是es3中一个遍历数组的方法,可以调用数组的每个元素,并将元素传给回调函数进行处理,语法“array.forEach(function(当前元素,索引,数组){...})”;该方法不处理空数组。


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경
