ES6之Symbol

简介: ES6之Symbol

ES6中为我们新增了一个原始数据类型Symbol,让我为大家介绍一下吧!

Symbol它表示是独一无二的值

Symbol要如何创建

第一种创建方式:

let sy = Symbol()

第二种创建方式:

let sy = Symbol.for()

具体独一无二在哪呢?它们的地址不相同。

let sy = Symbol("name")
    let sy1 = Symbol("name")
    console.log(sy === sy1) //false

但如果我们使用Symbol.for创建

let sy = Symbol.for("name")
    let sy1 = Symbol.for("name")
    console.log(sy === sy1) // true

Symbol不能与其他数据进行运算

let sy = Symbol()
    console.log(sy + 1) //报错
    console.log(sy > 1) //报错
    console.log(sy + "1") //报错

Symbol可以作用在哪呢?

用来定义对象的私有变量

如何写入对象?

第一种:

let sy = Symbol("sy1")
    const obj = {}
    obj[sy] = "私有的"
    console.log(obj)

第二种:

let sy = Symbol("sy1")
    const obj = {
        [sy] : "私有的"
    } 
    console.log(obj)

第三种添加的键值:

const obj = {
        sy : Symbol("私有的")
    } 
    console.log(obj)

我们可以用keyFor来获取Symbol.for()创建的值

let sy = Symbol.for("hello")
    console.log(Symbol.keyFor(sy))//hello

我们怎么获取呢?可以使用 对象[ ]的方法取到

记住取Symbol的值时,不能用点(.)取

//获取成功
console.log(obj[sy]) //私有的

我们用点(.)取值试一下,取到undefined

console.log(obj.sy) //undefined

我们该如何循环取到Symbol

我们用对象的for in方法试一试

由此可见,取不到Symbol

let sy = Symbol("hello")
    const obj = {
        name:"张三",
        age:18,
        
    }
    obj[sy] = "私有的"
    for(let k in obj) {
        console.log(obj) //{name: '张三', age: 18, Symbol(hello): '私有的'}
        console.log(k) //name age
        console.log(obj[k]) //张三 18
    }

我们使用getOwnPropertySymbols()

let sy = Symbol("hello")
    const obj = {
        name:"张三",
        age:18    
    }
    obj[sy] = "私有的"
    let a = Object.getOwnPropertySymbols(obj)
    console.log(a)

感谢大家的阅读,如有不对的地方,可以向我指出,感谢大家!

相关文章
|
6月前
|
JavaScript 前端开发
ES6:什么是Symbol?
ES6:什么是Symbol?
74 1
|
6月前
ES6之Symbol
ES6之Symbol
|
6月前
|
JavaScript 前端开发
|
6月前
|
JavaScript 前端开发 开发者
|
4月前
|
存储 JavaScript 前端开发
JavaScript编码之路【ES6新特性之 Symbol 、Set 、Map、迭代器、生成器】(二)
JavaScript编码之路【ES6新特性之 Symbol 、Set 、Map、迭代器、生成器】(二)
50 1
|
4月前
|
存储 JavaScript 前端开发
JavaScript编码之路【ES6新特性之 Symbol 、Set 、Map、迭代器、生成器】(一)
JavaScript编码之路【ES6新特性之 Symbol 、Set 、Map、迭代器、生成器】(一)
35 0
|
6月前
|
存储 JavaScript
ES6+新特性-Symbol与Set/Map数据结构
ES6 引入了三种新的数据结构:Symbol、Set和Map。Symbol是唯一且不可变的值,常用于定义对象的独特属性;Set存储不重复值,适合数组去重;Map则是键值对集合,键可为任意类型,提供了更灵活的存储方式。这些新数据结构提供了更高效的操作手段,分别解决了属性命名冲突、数据去重和复杂键值对存储的问题。示例展示了如何使用Symbol、Set和Map进行基本操作。
|
6月前
|
JavaScript
js开发:请解释什么是ES6的Symbol,以及它的用途。
ES6的Symbol数据类型创建唯一值,常用于对象属性键(防冲突)和私有属性。示例展示了如何创建及使用Symbol:即使描述相同,两个Symbol也不等;作为对象属性如`obj[symbol1] = 'value1'`;也可作枚举值,如`Color.RED = Symbol('red')`。
50 4
|
6月前
|
JavaScript 前端开发
ES6之原始数据类型Symbol
ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值。它属于 JavaScript 语言的原生数据类型之一,其他数据类型是:undefined、null、布尔值(Boolean)、字符串(String)、数值(Number)、大整数(BigInt)、对象(Object)。Symbol的作用是创建一个不可变且唯一的标识符,可以用作对象属性的键。它可以用来解决属性名冲突的问题,避免命名冲突。
75 0
ES6: Symbol概念与用法举例
ES6: Symbol概念与用法举例
54 0