JS symbol类型理解

什么是symbol

  1. symbol是es6新增的一种基本数据类型

  1. symbol用来表示一个独一无二的值,其格式是let name=Symbol('标识字符串(用来进行标识,无任何意义)'),基本数据类型声明时不要加new

  1. symbol类型可以作为属性名,使用时需要加上[]

例子:

let name = Symbol('name')
let obj = {
    [name]: '哈哈',
    age: 22
  }
obj.name = '呵呵';
obj[Symbol('nmae')] = '嘿嘿';
console.log(obj)

打印结果如下:

symbol类型的值时独一无二的,所以默认创建一个新的name属性,不会被覆盖

注意点

  1. 类型转化只能转化为字符串和布尔值,不能转化为数值

console.log(String(name));//Symbol(name)
console.log(Boolean(name));//true
console.log(Number(name));//报错
  1. 不能做任何运算

console.log(name+111)
console.log(name+'ccc')
//报错
  1. symbol生成的值作为属性或者方法的时候,一定要保存下来,否则后续无法使用

let name=Symbol('name');
let obj={
  // name:'哈哈',
    [Symbol('name')]:'lbj'
}
console.log(obj.name);  //访问不到,因为  [Symbol('name')]又是一个新的值,和上面的name不是同一个
  1. for循环遍历对象的时候是无法遍历出symbol的属性和方法的。

Object.getOwnPropertySymbols():返回对象中只包含symbol类型key的数组

Reflect.ownKeys() :返回对象中所有类型key的数组(包含symbol)

let name=Symbol('name');
let obj={
  [name]:'哈哈哈',
    age:12,
}
for(let key in obj){
    console.log(key)   //只能打印出age
}
console.log(Object.getOwnPropertySymbols(obj))//['Symbol(name)']
console.log(Reflect.ownKeys(obj))//['Symbol(name)','age']

symbol自带的方法

  1. symbol.for()

let s1 = Symbol.for('foo');
let s2 = Symbol.for('foo');
s1 === s2 // true
    
  1. symbole.keyFor() 返回一个已登记的 Symbol 类型值的key

let s1 = Symbol.for("foo");
Symbol.keyFor(s1) // "foo"

let s2 = Symbol("foo");
Symbol.keyFor(s2) // undefined
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值