es6---es6新增的Bigint、Symbol数据类型,set、map数据结构
admin
2024-01-20 06:48:54
0

一、BigInt

BigInt是ES10新加的一种JavaScript数据类型,用来表示表示大于 2^53 - 1 的整数,2^53 - 1是ES10之前,JavaScript所能表示最大的数字

const bigNum = BigInt(1728371927189372189739217)
console.log(typeof bigNum) // bigint

二、Symbol

SymbolES6中新增的一种基本数据类型,它是一个函数,会返回一个Symbol类型的值,每一个Symbol函数返回的值都是唯一的,它们可以被作为对象属性的标识符。

typeof Symbol(); // Symbol

基本用法:使用Symbol值作为对象的key

   let name=Symbol() //声明一个变量,数据类型为symbollet obj={[name]:"hsq"}
console.log(obj.name);// undefined
console.log(obj[name]);// hsq

注意:当我们使用变量去定义一个对象key时需要使用[ ]包裹着,否则就会被自动转化成string类型,因为属性使用变量进行定义,所以获取属性值需要使用obj[key]这种方式获取

但是Symbol作为属性的属性不会被枚举出来

   let name=Symbol() //声明一个变量,数据类型为symbollet obj={[name]:"hsq",age:22}console.log(Object.keys(obj)) // [ 'age' ]for(const key in obj) {console.log(key) // age}console.log(JSON.stringify(obj)) // {"age":22}

获取Symbol属性

  let name=Symbol('name') //声明一个变量,数据类型为symbollet obj={[name]:"hsq",age:22}
// 方法一
console.log(Object.getOwnPropertySymbols(obj)) // [ Symbol(name) ]
// 方法二
console.log(Reflect.ownKeys(obj)) // [ 'name', 'age', Symbol(name) ]

应用场景:使用Symbol定义类的私有属性

   class Login {constructor(username, password) {const PASSWORD = Symbol()this.username = usernamethis[PASSWORD] = password}checkPassword(pwd) { return this[PASSWORD] === pwd }
}const login = new Login('123456', 'hahah')console.log(login.PASSWORD) // undefined
console.log(login[PASSWORD]) // 报错

 三、set(集合)

Set 对象(集合)类似于数组,且成员的值都是唯一的(通俗的理解:不能出现相同的元素)

常用语法

// 可不传数组
const set1 = new Set()
set1.add(1)
set1.add(2)
console.log(set1) // Set(2) { 1, 2 }// 也可传数组
const set2 = new Set([1, 2, 3])
// 增加元素 使用 add
set2.add(4)
set2.add('林三心')
console.log(set2) // Set(5) { 1, 2, 3, 4, '林三心' }
// 是否含有某个元素 使用 has
console.log(set2.has(2)) // true
// 查看长度 使用 size
console.log(set2.size) // 5
// 删除元素 使用 delete
set2.delete(2)
console.log(set2) // Set(4) { 1, 3, 4, '林三心' }

不重复性 

// 两个对象都是不同的指针,所以没法去重
const set1 = new Set([1, {name: '林三心'}, 2, {name: '林三心'}])
console.log(set1) // Set(4) { 1, { name: '林三心' }, 2, { name: '林三心' } }// 如果是两个对象是同一指针,则能去重
const obj = {name: '林三心'}
const set2 = new Set([1, obj, 2, obj])
console.log(set2) // Set(3) { 1, { name: '林三心' }, 2 }咱们都知道 NaN !== NaN,NaN是自身不等于自身的,但是在Set中他还是会被去重
const set = new Set([1, NaN, 1, NaN])
console.log(set) // Set(2) { 1, NaN }

 

最常用来去重使用,去重方法有很多但是都没有它运行的快。

const arr = [1, 2, 3, 4, 4, 5, 5, 66, 9, 1]// Set可利用扩展运算符转为数组哦
const newArr = [...new Set(arr)]
console.log(newArr) // [1,  2, 3, 4, 5, 66, 9]

四、map

Map 是一组键值对的结构,和 js对象类似。

基本用法

//初始化`Map`需要一个二维数组(请看 Map 数据结构),或者直接初始化一个空`Map` 
let map = new Map();//添加key和value值
map.set('Amy','女')
map.set('liuQi','男')//是否存在key,存在返回true,反之为false
map.has('Amy') //true
map.has('amy') //false//根据key获取value
map.get('Amy') //女//删除 key为Amy的value
map.delete('Amy')
map.get('Amy') //undefined  删除成功

Map对比object最大的好处就是,key不受类型限制

// 定义map
const map1 = new Map()
// 新增键值对 使用 set(key, value)
map1.set(true, 1)
map1.set(1, 2)
map1.set('哈哈', '嘻嘻嘻')
console.log(map1) // Map(3) { true => 1, 1 => 2, '哈哈' => '嘻嘻嘻' }
// 判断map是否含有某个key 使用 has(key)
console.log(map1.has('哈哈')) // true
// 获取map中某个key对应的value 使用 get(key)
console.log(map1.get(true)) // 1
// 删除map中某个键值对 使用 delete(key)
map1.delete('哈哈')
console.log(map1) // Map(2) { true => 1, 1 => 2 }// 定义map,也可传入键值对数组集合
const map2 = new Map([[true, 1], [1, 2], ['哈哈', '嘻嘻嘻']])
console.log(map2) // Map(3) { true => 1, 1 => 2, '哈哈' => '嘻嘻嘻' }

相关内容

热门资讯

安卓点歌系统歌曲下载,畅享音乐... 你有没有想过,在安卓手机上点歌系统里下载歌曲,竟然能这么有趣呢?想象你坐在沙发上,手指轻轻一点,就能...
重名系统下载安卓版本,探索身份... 你有没有想过,有时候名字也能成为连接世界的桥梁呢?没错,今天我要跟你聊聊一个特别有趣的话题——重名系...
安卓系统图标被删除,揭秘背后原... 你有没有发现,最近你的安卓手机上某个图标突然不见了?是不是觉得有点奇怪,心里直痒痒,想知道这到底是怎...
苹果系统查安卓王者荣耀,跨平台... 你有没有发现,最近苹果系统和安卓系统之间的“战争”越来越激烈了?这不,连我们平时爱玩的游戏——王者荣...
卡片记账有安卓系统吗,便捷财务... 你有没有想过,用手机来管理你的财务?是的,你没听错,就是那种随时随地都能查看的智能手机。今天,我要和...
安卓停车场管理系统,便捷出行新... 你有没有想过,停车场的日子也能变得如此智能和便捷?没错,就是那个我们每天都要打交道,却又常常抱怨的地...
云os系统刷回安卓系统版本,深... 你有没有想过,你的手机系统突然变得有点儿“水土不服”了呢?是不是觉得云OS系统用起来有点儿别扭,想要...
安卓重刷系统照片还有吗,照片是... 你有没有遇到过安卓手机重刷系统后,照片丢失的尴尬情况?这可真是让人头疼不已。别急,今天就来跟你聊聊这...
安卓系统音效哪个好,探寻最佳音... 你有没有发现,手机里的音效有时候真的能让人心情大好呢?比如,当你玩游戏时,那激昂的战斗音效能瞬间点燃...
手机安卓系统与苹果系统的区别,... 你有没有发现,现在手机市场上两大巨头——安卓系统和苹果系统,就像是一对双胞胎,长得好像,但仔细一看,...
iOS系统怎么模拟安卓,可以通... 你有没有想过,在iOS设备上也能体验安卓系统的乐趣呢?没错,就是那种在iPhone上玩安卓游戏、使用...
安卓系统彻底退出程序,安卓系统... 你知道吗?最近有个大新闻在科技圈里炸开了锅——安卓系统彻底退出程序!是的,你没听错,那个陪伴我们多年...
win与安卓双系统平板,Win... 你有没有想过,拥有一台既能轻松处理工作,又能畅享娱乐的平板电脑是多么美妙的事情?想象一边在办公室里用...
vm安卓系统pc版,跨平台体验... 你有没有想过,那些在手机上玩得风生水起的安卓游戏,能不能在电脑上也能畅快淋漓地体验一番呢?今天,就让...
安卓录屏声音系统内录,安卓系统... 亲爱的手机控们,你是否有过这样的经历:想要记录下手机上的精彩瞬间,却发现录屏时没有声音?别急,今天就...
安卓9哪个系统最好用,揭秘最流... 你有没有发现,安卓系统更新换代的速度简直就像小孩子的成长一样快?这不,安卓9已经悄然登场,各种版本层...
无边框的平板安卓系统,探索无边... 亲爱的读者,你是否曾幻想过拥有一款无边框的平板,它不仅屏幕大得可以让你尽情畅游虚拟世界,而且操作系统...
安卓系统没有siri吗,智能语... 你有没有想过,为什么安卓系统里没有像苹果手机那样酷炫的Siri呢?是不是觉得少了点什么?别急,今天就...
手机系统安卓几好用,体验升级的... 你有没有发现,现在手机市场上安卓系统简直成了香饽饽?各大品牌纷纷推出搭载安卓系统的手机,那场面,简直...
安卓十二系统有哪些手机,安卓1... 你有没有听说安卓十二系统已经发布了?这可是科技圈的大事啊!今天,我就要给你详细介绍哪些手机已经升级到...