目录

  • 简介
  • 为什么要有这个数据类型
  • 作用

    • 如果想用toString办法,又怕和原生的抵触,能够用Symbol
    • 更适宜做公有属性,因为一般的遍历是拜访不到的
    • 目前最次要的作用就是为对象增加举世无双的属性名
  • 应用symbol
  • 取值
  • ES6-ES10学习幅员

简介

一种全新的原始数据类型,js的根本数据类型。**不那么深刻,就先简略记个笔记

为什么要有这个数据类型

之前当不一样的文件中,对同一个变量进行操作的时候,会有净化的状况,所以为了解决这种问题,约定俗称会在属性名中增加文件名。

作用

如果想用toString办法,又怕和原生的抵触,能够用Symbol

const obj = {  [Symbol.toStringTag]: 'XObject'}console.log(obj.toString()) // [object XObject] 

更适宜做公有属性,因为一般的遍历是拜访不到的

const obj1 = {  [Symbol()]: 'symbol value',  foo: 'normal value'}for(let key in obj1) {  console.log(key)  // foo}console.log(Object.keys(obj1)) // [ 'foo' ]console.log(JSON.stringify(obj1)) // {"foo":"normal value"}// 应用上面的办法,能够获取到symbol的属性名console.log(Object.getOwnPropertySymbols(obj1)) // [ Symbol() ]

目前最次要的作用就是为对象增加举世无双的属性名

// shared.jsconst cache = {}// a.jscache['foo'] = 123// b.jscache['foo'] = 234console.log(cache) // {foo: 234}// ==============================================// a.jscache['a_foo'] = 123// b.jscache['b_foo'] = 234console.log(cache) // {a_foo: 123, b_foo: 234}

应用symbol

// 通过symbol函数创立一个symbol类型的数据const s = Symbol()console.log(s) // Symbol()console.log(typeof s) // symbolconsole.log(Symbol() === Symbol()) // false 举世无双的数据// 咱们能够增加形容文本console.log(Symbol('foo')) // Symbol(foo)console.log(Symbol('bar')) // Symbol(bar)// 对象的属性名能够是symbol类型也能够是string类型// a.jsconst name = Symbol()const person = {  [name] : 'xm',  say () {    console.log(this[name])  }}// b.jsperson.say() // xm

取值

有for办法能够获取到那个值

const s1 = Symbol.for('foo')const s2 = Symbol.for('foo')console.log(s1 === s2) // true// 须要留神的是,那个for对应的是字符串,所以true和'true'的成果是一样的console.log(Symbol.for(true) === Symbol.for('true')) // true
  • JS八种数据类型:Number、String、Boolean、Null、undefined、object、symbol、bigInt
  • JS七种根本数据类型:Number、String、Boolean、Null、undefined、symbol、bigInt

ES6-ES10学习幅员