• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Rgzs
博客园    首页    新随笔    联系   管理    订阅  订阅
symbol 数据类型

symbol解决了 重命名的问题,解决对象的属性名冲突。

描述信息 每个Symbol都是独一无二的 通过遍历是获取不到symbol 使用 Object.getOwnPropertySymbols

  

let name2 = Symbol("name");
let age = Symbol("age");
let name1 = Symbol("name");
console.log(name1);
console.log(name1 == name2);//false

 

不能遍历

let obj = {
        name: '名字',
        [name1]: "shdkjdshg",
        [name2]: "sdfhs"
    }
    console.log(Object.keys(obj));//数组长度为1
    for (let key in obj) {
        console.log(key);//name 不能遍历Symbol
    }

  

在对象中,获取symbol  要加 []

let sym = Symbol();
console.log(sym);
let sym2 = Symbol();
console.log(sym == sym2);//false 每个Symbol都是独立的
 
//对象
let obj = {
    name:"张三",
    [sym]:"Symbol太厉害了"
}
console.log(obj.sym);//undefined
console.log(obj[sym])// Symbol太厉害了

symbol常用方法:

1、Object.getOwnPropertySymbols函数 获取symbol类型的属性

console.log(Object.getOwnPropertySymbols(obj));
Object.getOwnPropertySymbols(obj).forEach(item => {
    console.log(item);
})

  

2、Reflect.ownKeys函数 同时获取字符串类型的属性和获取symbol类型的属性

console.log(Reflect.ownKeys(obj));
Reflect.ownKeys(obj).forEach(item => console.log(obj[item]))

  

3、Symbol.for函数 函数作用:根据参数名,去全局环境中搜索是否有以该symbol.for()参数为名的symbol值,有就返回它,没有就以该参数名来创建一个新的symbol值

let n1 = Symbol.for('name');
let n2 = Symbol.for('name');
console.log(n1==n2);//true
let n3 = Symbol('name');
console.log(n1==n3);//false

  

4、KeyFor 函数作用:返回一个以被登记在全局环境中的symbol值的key,没有就返回undefined。

全局的symbol

let sym1 =  Symbol.for("name")

如果name在全局未创建,则会在全局创建Symbol

如果name已经创建了,则会返回全局的Symbol

let n3 = Symbol('name');
console.log(n1==n3);//false
console.log(Symbol.keyFor(n1));//name
console.log(Symbol.keyFor(n3));//undefined

  

posted on 2020-09-02 23:22  飄落的葉子  阅读(149)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3