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)

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

相关推荐
孜然卷k3 分钟前
前端导出word文件,并包含导出Echarts图表等
前端·javascript
家里有只小肥猫24 分钟前
uniApp小程序保存canvas图片
前端·小程序·uni-app
前端大全27 分钟前
Chrome 推出全新的 DOM API,彻底革新 DOM 操作!
前端·chrome
八角丶38 分钟前
元素尺寸的获取方式及区别
前端·javascript·html
冴羽1 小时前
Svelte 最新中文文档教程(16)—— Context(上下文)
前端·javascript·svelte
前端小臻1 小时前
关于css中bfc的理解
前端·css·bfc
白嫖不白嫖1 小时前
网页版的俄罗斯方块
前端·javascript·css
HappyAcmen1 小时前
关于Flutter前端面试题及其答案解析
前端·flutter
顾比魁1 小时前
pikachu之CSRF防御:给你的请求加上“网络身份证”
前端·网络·网络安全·csrf
林的快手1 小时前
CSS文本属性
前端·javascript·css·chrome·node.js·css3·html5