【JavaScript】Symbol 基本数据类型

Symbol作为JavaScript ES6新的原始数据类型,表示独一无二的值。

它有以下几个特性

无法用new进行显式定义

let a = Symbol() let b = new Symbol() // 报错

typeOf返回的值为Symbol

var sym = Symbol('foo')

typeof sym // 'symbol'

Symbol属性是不可枚举的

symbol不会在for循环、for(...in...)中出现,因为这个属性是匿名的

let temp = { 
    [Symbol('people')]: 'symbol类型', 
    id: 123, 
    des: '定义类型' 
} 
for (let prop in temp ) { 
    console.log(prop) // 分别会输出:'id' 和 'des' 
}

Object.getOwnPropertySymbols()该方法可以返回一个包含所有Symbol自有属性的数组:

let temp = { 
    [Symbol('people')]: 'symbol类型', 
    id: 123, 
    des: '定义类型' 
} 
Object.getOwnPropertySymbols(temp) // [Symbol(people)]

Object.keys()和Object.getOwnPropertyNames()方法可以检索对象中所有的属性名,前一个方法返回所有的可枚举属性名.后一个方法不考虑属性的可枚举性一律返回,但都不能返回symbol属性

Object.keys(temp ) // ['id', 'des'] 

Object.getOwnPropertyNames(obj) // ['id', 'des']

定义两个相同的Symbol数据是不相等的

如果要创建就一个共享的Symbol需要用到Symbol.for()方法. Symbol.for()方法首先在全局Symbol注册表中搜索键为‘uid’的Symbol是否存在,如果存在,直接返回已有的Symbol;否则,创建一个新的Symbol,并使用这个键在Symbol全局注册表中注册,随机返回新创建的Symbol。

let a = Symbol('AAA') 
let b = Symbol('AAA') 

console.log(a === b) // false 


let c = Symbol.for('uid') 
let d = Symbol.for('uid') 

console.log(c === d) // true

使用JSON.stringify()时,以symbol值作为键的属性会被忽略

JSON.stringify({[Symbol('foo')]: 'foo'});                 
// '{}'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值