专栏首页寻找石头鱼深入理解ES6之—符号与符号属性

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

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

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

let firstName = Symbol();
let person = {};

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

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

使用符号值

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()接受单个字符串类型的参数,作为目标符号值的标识符,同时此参数也会成为该符号的描述信息。

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()方法,以便可以检索对象的符号类型属性。

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)]

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • sql server数据库备份压缩拷贝实例

    --数据库备份压缩拷贝实例:前提要安装RAR压缩软件 --声明变量 declare @day varchar(10),@dbname varchar(20),@...

    寻找石头鱼
  • 深入理解ES6之—set与map

    Set是无重复值的有序列表。Set会自动移除重复的值,因此你可以使用它来过滤数组中重复的值并返回结果。

    寻找石头鱼
  • 深入理解ES6之——迭代器与生成器

    迭代器是被设计专用于迭代的对象,带有特定接口。所有的迭代器对象都有next方法,会返回一个结果对象。该结果对象有两个属性:对应下一个值的value,以及一个布尔...

    寻找石头鱼
  • Eviews(8)进行线性回归(ols一元)与格兰杰(Granger)因果关系检验操作步骤

    使用EViews软件进行OLS估计参数,建立线性回归模型,同时得到模型的拟合图和残差图。点击proc->Make Model,弹出Model窗口。得到回归方程。...

    学到老
  • Eviews(8)进行线性回归(ols一元)与格兰杰(Granger)因果关系检验操作步骤

    使用EViews软件进行OLS估计参数,建立线性回归模型,同时得到模型的拟合图和残差图。点击proc->Make Model,弹出Model窗口。得到回归方程。...

    学到老
  • python3版本mysql的操作

             conn=pymysql.connect("localhost","root”,“密码”,“数据库名”) #打开数据库          连接...

    py3study
  • 那些年,使用Github的正确姿势

    使用方法:谷歌浏览器输入:chrome://extensions/ 然后拖动进去即可!

    公众号guangcity
  • TCGA数据库临床资料官方大全

    因为TCGA计划跨时太长,纳入研究的病人数量太多, 或多或少有点资料继续错误或者不完整,所以TCGA团队下功夫在计划结束后(April 2018)完整的系统性的...

    生信技能树
  • 10分钟教你为自己打造一个专属VIM

    Vim 是一个上古神器,本篇文章主要持续总结使用 Vim 的过程中不得不了解的一些指令和注意事项,以及持续分享一个前端工作者不得不安装的一些插件,而关于 Vim...

    马哥linux运维
  • Linux日常运维小结

    1. 如何看当前Linux系统有几颗物理CPU和每颗CPU的核数? 物理cpu个数:cat /proc/cpuinfo |grep -c ‘physical ...

    老七Linux

扫码关注云+社区

领取腾讯云代金券