es6 --- es6 новый Bigint, тип данных символа, набор, структура данных карты

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  删除成功

MapobjectСамым большим преимуществом сравнения является то, что ключ не зависит от类型限制

// 定义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, '哈哈' => '嘻嘻嘻' }

Guess you like

Origin blog.csdn.net/h18377528386/article/details/127719980