ES6之Symbol

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

Symbol它表示是独一无二的值

Symbol要如何创建
第一种创建方式:

javascript 复制代码
    let sy = Symbol()

第二种创建方式:

javascript 复制代码
    let sy = Symbol.for()

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

javascript 复制代码
    let sy = Symbol("name")
    let sy1 = Symbol("name")
    console.log(sy === sy1) //false

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

javascript 复制代码
    let sy = Symbol.for("name")
    let sy1 = Symbol.for("name")
    console.log(sy === sy1) // true

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

javascript 复制代码
    let sy = Symbol()
    console.log(sy + 1) //报错
    console.log(sy > 1) //报错
    console.log(sy + "1") //报错

Symbol可以作用在哪呢?

用来定义对象的私有变量

如何写入对象?
第一种:

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

第二种:

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

第三种添加的键值:

javascript 复制代码
    const obj = {
        sy : Symbol("私有的")
    } 
    console.log(obj)

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

javascript 复制代码
    let sy = Symbol.for("hello")
    console.log(Symbol.keyFor(sy))//hello

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

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

javascript 复制代码
//获取成功
console.log(obj[sy]) //私有的

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

javascript 复制代码
console.log(obj.sy) //undefined

我们该如何循环取到Symbol

我们用对象的for in方法试一试
由此可见,取不到Symbol

javascript 复制代码
    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()

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

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

相关推荐
咩咩啃树皮8 小时前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构
阳光是sunny8 小时前
LangGraph中的Reducer是什么
前端·人工智能·后端
触底反弹8 小时前
一文搞懂 Tailwind CSS 弹性布局:从原理到实战
前端·css·html
阳光是sunny8 小时前
从链到图:LangGraph 入门基础全解析
前端·人工智能·后端
小林ixn9 小时前
从 ??= 到 onKeyDown:一个 React 组件的“自我修养”
前端·javascript·react.js
REDcker9 小时前
显示分辨率标准对照详解
前端·网络·分辨率·显示·屏幕
এ慕ོ冬℘゜10 小时前
前端实战:jQuery 多条件联合搜索(标题模糊查询 + 日历时间段筛选)
前端·javascript·jquery
武子康10 小时前
Search Console Platform Properties 扩大 SEO 资产边界:从 Page Ranking 到 Topic Coverage(5 类误读边界 + 3 表数据层设计)
前端·人工智能·后端
随心点儿10 小时前
js postMessage 实现跨域发送消息-应用示例
javascript·ecmascript·postmessage
一点一木10 小时前
从60首歌到1个网站:输入你的故事,还你一首歌
前端·github