1. БигИнт
BigInt
Это новый тип данных JavaScript, добавленный в ES10, который используется для представления 2^53 - 1
целого числа, большего этого. 2^53 - 1
Это наибольшее число, которое JavaScript мог представить до ES10.
const bigNum = BigInt(1728371927189372189739217)
console.log(typeof bigNum) // bigint
2. Символ
Symbol
Это ES6
новый базовый тип данных в . Это функция, которая возвращает Symbol
тип значения. Значение, возвращаемое каждой Symbol
функцией, уникально, и их можно использовать в качестве идентификаторов свойств объекта.
typeof Symbol(); // Symbol
Основное использование: используйте значение символа в качестве ключа объекта.
let name=Symbol() //声明一个变量,数据类型为symbol
let obj={
[name]:"hsq"
}
console.log(obj.name);// undefined
console.log(obj[name]);// hsq
Примечание. Когда мы используем переменные для определения ключа объекта, нам нужно использовать [ ] для его переноса, в противном случае он будет автоматически преобразован в строковый тип, поскольку атрибуты определяются с использованием переменных, поэтому вам нужно использовать obj[key] для получить значения атрибутов
Но атрибуты Символа как атрибуты перечисляться не будут.
let name=Symbol() //声明一个变量,数据类型为symbol
let 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}
Получить свойство символа
let name=Symbol('name') //声明一个变量,数据类型为symbol
let obj={
[name]:"hsq",
age:22
}
// 方法一
console.log(Object.getOwnPropertySymbols(obj)) // [ Symbol(name) ]
// 方法二
console.log(Reflect.ownKeys(obj)) // [ 'name', 'age', Symbol(name) ]
Сценарий приложения: используйте символ для определения частных свойств классов.
class Login {
constructor(username, password) {
const PASSWORD = Symbol()
this.username = username
this[PASSWORD] = password
}
checkPassword(pwd) { return this[PASSWORD] === pwd }
}
const login = new Login('123456', 'hahah')
console.log(login.PASSWORD) // undefined
console.log(login[PASSWORD]) // 报错
Три, комплект (коллекция)
Объекты множества (коллекции) подобны массивам, а значения членов уникальны (общее понимание: одинаковые элементы появляться не могут)
общая грамматика
// 可不传数组
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]
Четыре, карта
Карта — это структура набора пар ключ-значение, аналогичная объектам 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
Самым большим преимуществом сравнения является то, что ключ не зависит от类型限制
// 定义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, '哈哈' => '嘻嘻嘻' }