前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深入理解ES6之—符号与符号属性

深入理解ES6之—符号与符号属性

作者头像
寻找石头鱼
发布2019-09-11 16:25:10
5960
发布2019-09-11 16:25:10
举报
文章被收录于专栏:寻找石头鱼寻找石头鱼

在js已有的基本类型(字符串,数值,布尔型,null和undefined)之外,es6引入了一种新的基本类型:==符号(Symbol)==。符号起初被设计用于创建对象私有成员。

符号没有字面量形式,你可以使用全局Symbol函数来创建一个符号值。

代码语言:javascript
复制
let firstName = Symbol();
let person = {};

person[firstName] = "nicolas";
console.log(person[firstName]);

Symbol还可以接受一个额外的参数用于描述符号值。建议始终给符号提供描述信息,以便更好的阅读代码和进行调试。

使用符号值

代码语言:javascript
复制
let firstName = Symbol("first name");
let person = {
    [firstName]: "nicolas"
}

//让改属性变成只读的
Object.defineProperties(person, firstName, {
    writable: false
});

let lastName = Symbol("last name");
Object.defineProperties(person, {
    [lastName]: {
        value: "cc",
        writable: false
    }
});
person[lastName] = "dd";
console.log(person[firstName]);//nicolas
console.log(person[lastName]);//cc

共享符号值

如果要创建共享符号值,应使用Symbol.for()方法而不是Symbol()方法。Symbol.for()接受单个字符串类型的参数,作为目标符号值的标识符,同时此参数也会成为该符号的描述信息。

代码语言:javascript
复制
let uid = Symbol.for("uid");
let object = {};
object[uid] = "12345";
console.log(object[uid]);//12345
console.log(uid);//Symbol(uid)

Symbol.for()方法首先会搜索全局符号注册表,看是否存在一个键值为“uid”的符号值。

检索符号属性

Object.keys()和Object.getPropertyNames()方法可以检索对象的所有属性和名称,前者返回所有的可枚举属性名称,后者返回所有属性名称而无视其是否可枚举。es6新增了Object.getOwnPropertySymbols()方法,以便可以检索对象的符号类型属性。

代码语言:javascript
复制
let uid = Symbol.for("uid");

let first = Symbol("first name");
let object = {
    name: "cc",
    age: 26
};

object[uid] = "12345";
object[first] = "111";

console.log(Object.getOwnPropertyNames(object));//["name","age"]
console.log(Object.getOwnPropertySymbols(object));//[Symbol(uid),Symbol(first name)]
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-10-30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用符号值
  • 共享符号值
  • 检索符号属性
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档