深入理解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)]
深入理解ES6之—符号与符号属性的更多相关文章
- 【读书笔记】【深入理解ES6】#6-Symbol和Symbol属性
在ES5及早期版本中,JS语言包含5中原始类型: 字符串型 数字型 布尔型 null undefined ES6引入了第六种原始类型: Symbol 创建Symbol let firstName = ...
- 深入理解ES6之—对象
Object新方法 Object.is()方法 在js中比较两个值时,你可能会用相等运算符==或者严格相等运算符 ===.为了避免在比较时发生强制类型转换,许多开发者更倾向于使用后者. Object. ...
- 深入理解javascript对象系列第二篇——属性操作
× 目录 [1]查询 [2]设置 [3]删除[4]继承 前面的话 对于对象来说,属性操作是绕不开的话题.类似于“增删改查”的基本操作,属性操作分为属性查询.属性设置.属性删除,还包括属性继承.本文是对 ...
- 《CSAPP》符号和符号表
符号和符号表 每个可重定位目标模块m都有一个符号表,它包含m所定义和引用的符号的信息. 有三种不同的符号: 由m定义并能被其他模块引用的全局符号.对应非静态的C函数以及不带C static属性的全局变 ...
- 理解 ES6 Generator-next()方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 前端知识体系:JavaScript基础-原型和原型链-理解 es6 中class构造以及继承的底层实现原理
理解 es6 中class构造以及继承的底层实现原理 原文链接:https://blog.csdn.net/qq_34149805/article/details/86105123 1.ES6 cla ...
- (js) 输入框只能输入中文、英文、数字、@符号和.符号
只能输入中文.英文.数字.@符号和.符号<input type="text" onkeyup="value=value.replace(/[^\a-\z\A-\Z0 ...
- maven 在clean package时,出现:找不到符号 [ERROR] 符号: 方法 sqlDdlFilter(java.lang.String) 解决办法
另一个项目中增加了,sqlDdlFilter 在调用的项目中clean package时,出现 找不到符号[ERROR] 符号: 方法 sqlDdlFilter(java.lang.String) 原 ...
- VS2013 warning C4018 "<” 有符号/无符号不匹配
1, VS2013 warning C4018 "<” 有符号/无符号不匹配" 警告 出错代码: void show(const vector<int>& ...
- package.json中^符号和~符号前缀的区别
开发中经常会使用npm install 安装依赖包,经常会看到^符号和~符号,现将二者的区别总结如下: 版本号 x.y.z : z :表示一些小的bugfix, 更改z的号, y ...
随机推荐
- 【Java集合源代码剖析】LinkedHashmap源代码剖析
转载请注明出处:http://blog.csdn.net/ns_code/article/details/37867985 前言:有网友建议分析下LinkedHashMap的源代码.于是花了一晚上时间 ...
- 【ODPS】TableTunnel单线程简单下载事例
ODPS Tunnel是ODPS的数据通道,用户能够通过Tunnel向ODPS中上传或者下载数据.眼下Tunnel仅支持表(不包含视图View)数据的上传下载. 主要接口 描写叙述 TableTunn ...
- 【Java入门提高篇】Day10 Java代理——静态代理
今天要介绍的是一个Java中一个很重要的概念--代理. 什么是代理?联系生活想想看,代理似乎并不陌生,最形象的代表便是经纪人,明星一般都有经纪人,经纪人作为中间人,负责代理明星的相关事宜,比如说,有人 ...
- Jquery 改变样式
Jquery简单的操作 Jquery 是一个非常好用JS库,有很多的特殊的操作,为了方便,我们都可以引入Jquery. <script src="dist/js/vendor/jque ...
- SQL_Server 常用语句以及语法整理
下列语句部分是Mssql语句,不可以在access中使用. SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DELETE, ...
- 如何使用 stack?- 每天5分钟玩转 Docker 容器技术(112)
定义好了 stack YAML 文件,就可以通过 docker stack deploy 命令部署应用. Docker 会按照 YAML 的内容来创建各种资源.为了不重名,所有资源都会加上 stack ...
- 串String(2):串的实现(堆分配存储表示法)
7/27/2017,先占个位,最近事情比较忙,明天敲一波代码,预测在一星期内搞定 9/02/2017,看到这个十分汗颜,八月去美帝学习了,没有抽空补上这一博文,计划这个月开了数据结构课后补上
- cocoapods管理以及常遇到的问题
CocoaPods使用 安装成功啦,咱们来创建Podfile文件 //咱们先滚去项目的根目录,如果不会,你就先滚去看看shell命令教程吧 $ cd /Users/JamesGu/Desktop/Co ...
- 页面重绘(repaint)和回流(reflow)
前言 页面显示到浏览器上的过程: 1.1.生成一个DOM树. 浏览器将获取到的HTML代码解析成1个DOM树,包含了所有标签,包括display:none和动态添加的节点. 1.2.生成样式结构体. ...
- 【Zookeeper】源码分析之Leader选举(一)
一.前言 分析完了Zookeeper中的网络机制后,接着来分析Zookeeper中一个更为核心的模块,Leader选举. 二.总结框架图 对于Leader选举,其总体框架图如下图所示 说明: 选举的父 ...