「这是我参与2022首次更文挑战的第14天,活动详情查看:2022首次更文挑战」

JS进阶系列文章

  • 函数式编程之纯函数
  • 函数式编程之柯里化
  • 函数式编程之组合函js函数式编程
  • 详解ES6中的Class
  • ES6知识点解析
  • ES6新增的数据结构
  • ES7知识点解析
  • Proxy代理对象
  • Reflect映射对象

前言

在上一篇文章中,我们讲了在函数式编程的优点有日常项数组词多音字组词目开发中关于ES6常用的语法,接下来我们聊一数组词多音字组词聊在ES6中新增的数据结构有哪些,它们是如何使用的。

ES6新增数据结构

Symbol

SymbolES6中新增的一个基本数据类型javascript百炼成仙之一,它是一个函数。每一个从Symbol函数返回的Symbol值都是独一无二的,symbol值作为对象属性的标识符,也是唯一的用途的。

const s1 = Symbol()
const s2 = Symbol()
console.log(s1 === s2); // false
symbol作为key

第一种方式,直接在对象的字面量中添加。

// symbol作为key
const obj = {
  [s1]:'abc',
  [s2]:'cc',
}

第二种方式,通过添加数组方式添加。

// 需要用数组方式来获取,不能通过点语法,否则会获取到字符串key
console.log(obj[s1]);

第三种方数据结构教程第5版李春葆答案式,通过对象中的defineProperty方法添加。

const s4=Symbol()
Object.defineProperty(obj,s4,{
  configurable:true,
  enumerable:true,
  writable:true,
  value:'ff'
})
通过symbol获取对应的值

需要用数组方式来获取,不能通过点语法,否则会获取到字符串key。

console.log(obj[s1]);

symbol不能被隐式转换成string类型。

注意:Symbol函数中的参数是symbol描述符,这是在ES10新增的特性

let Sym = Symbol("Sym")
alert(Sym)  // TypeError: Cannot convert a Symbol value to a string

我们不能直接alert一个symbol对象,但是我们可以通过toString的方式或者.desc函数式编程ription来获取symbol对象的描述符。

let sym = Symbol('a')
console.log(sym.description); // 'a'
遍历symbol

在使用for遍历、object.keyjavascript百炼成仙s中是获取不到symbol数组和链表的区别健的,对此object还提供了getOwnPropert函数式编程的优点有ySymbols方法,用于获取对象中所有symbo数组c语言l的key。

const sKeys=(Object.getOwnPropertySymbols(obj));
for(const skey of sKeys){
  console.log(obj[skey]);
}
全局sym数据结构bol对象注册

有时,我们可能需要多个symbol的值是一致的,我们可Java以通过symbol提供javascript怎么读的静态方法for方法传入一样的描述符来使它们的值一致。

Symbol.for

该方法会在使用给定键搜索运行时符号注册表中的现有符号,并在找到数组词多音字组词时返回它。否则,javaee使用此键在全局符号注册表中创建一个新符号。

const sa=Symbol.for('cc')
const sb=Symbol.for('cc')
console.log(sa===sb); //true
Symbol.keyFor

该方法用于获取全局symbol的描述符。

const key =Symbol.keyFor(sb)
console.log(key); // c

Set

Set对象(类似数组)允许你存放任何数据类型,但里面的值不能重复。数组的定义

const s1 = new Set()
s1.add(10)
s1.add(20)
s1.add(30)
s1.add(40)
console.log(s1) // Set(4) { 10, 20, 30, 40 }
s1.add(20)
console.log(s1) // Set(4) { 10, 20, 30, 40 }
Set常用方法
方法 返回值 说明
size set对象中的数组指针数量 返回set对象中的数量
ad函数式编程的优点有d Set对象 添加元素
delete boolean 删除元素
has boolean Set对象中是否存在java语言这个值
clear 清空Set对象中的值

WeakSet

WeakSet是类似Set的另外一种数据结构,内部数据也不能有重复值。

  • 它与Set的区别
    • WeakSet只能存放对象类型,不能存放基本数据类型
    • Weak数组词多音字组词Set对元素是弱引数据结构c语言版课后答案
基本使用
const weakSet = new WeakSet();
let obj = {
  name: "_island"
};
weakSet.add(obj);
WeakSet常用方法
方法 返回值java语言 说明
add weakset对象 添加元素
delete boolean 删除元素
has boolean weakset对象中是否存在这个值
关于遍历

Wejavascript是干什么的akSet不能被遍历,因为它只是对对象进行弱引用,如果遍历去获取元素,有可能导致对象不能被GC回收。

所以WeakSet中的对象是不能获取的

Map

ESjava模拟器6新增的数据结构,用于存储映数组词多音字组词射关系。我们知道在JavaScript中对java编译器象中是不能用对象来作为key的。(假如我们把对象作为key,其内部会java语言将对象转换为字符串[object object]

const obj1 = { name: "_island" };
const obj2 = { name: "QC2125" };
const obj3={
  [obj1]:'a',
  [obj2]:'b',
}
console.log(obj3);
// { '[object Object]': 'b' }

Map则可以把对象作为key进行存储,可以通过setjavascript是干什么的方法添加到Map中,也直接通过字javascript百炼成仙免费阅读面量java面试题的方式添加。

const obj1 = { name: "_island" };
const obj2 = { name: "QC2125" };
const map = new Map();
map.set(obj1, "a");
map.set(obj2, "b");
console.log(map); // Map(2) { { name: '_island' } => 'a', { name: 'QC2125' } => 'b' }
// or
const map2 = new Map([[obj1,'a'],[obj2,'b']])
Map常用方法
方法 返回值 说明
get 获取对应的元素 通过key获取对应元javascript菜鸟教程
size Map对象中数组去重的数量 返回Map对象中的数量
set Map对象 添加元素
delete boolean 删除元数据结构c语言版
has boolean Set对象中是否存在这个值
clear 清空Set对象中的值
遍历Map

通过foreach语句遍历Map

map2.forEach((item) => console.log(item));

通过for..of遍历Map

for ([val, key] of map2) {
  console.log(`${key}---${val}`);
}

WeakMap

Map类似,也是以键值对的形式存在的

  • 和Map的区别
    • WeakMapkey只能使用对象,不接受其他的类型作为key
    • WeakMapkey对对象是弱引用
基本使用
const weakMap = new WeakMap();
weakMap.set(obj, "a");
console.log(weakMap.get(obj)); // a
WeakMap常用方法
方法 返回值 说明
get weakmap对象 获取元素
delete boolean 删除元素
has boolean weaksmap对象中是否存在这个值
关于遍历

WeakSet一样,正因为它是弱引用,WeakMapkey是不可枚举的,如果kJavaey可枚举那其列表将会受GC影响。