ES6新数据类型Symbol
Symbol
需计算字面量属性时使用
const benz = Symbol('benz');
const car = {
[benz]: 'benz car'
};
const info = Symbol('my car info');
// 此时定义info为可枚举属性
Object.defineProperty(car, info, {
value: 'benz car description',
enumerable: true
});
// 定义price为不可枚举属性
Object.defineProperty(car, 'price', {
value: 1000000
});
注意上例中info与price均不可枚举,无法使用 for-in 遍历, 使用 Object.keys 也无法得到属性名。符号类型的属性均不可被枚举。
共享符号
Symbol.for 会搜索全局符号注册表,查找以传入的参数为键值,找到即返回该符号值,找不到再创建一个符号值并返回该值。
Symbol.keyFor 可以根据符号值在全局符号注册表中返回检索出的键值。
符号值的转换
符号值无法转换为字符串和数字,所以将符号值做为对象属性所带来的效果是其他类型无法替代的。将符号值与字符串进行拼接时会发生错误。
检索对象属性
我们将对象的属性分为符号值属性和普通属性,使用 Object.keys 或者 Object.getOwnPropertyNames 可以拿到对象的普通属性,前者拿到的是可枚举的普通属性,后者是所有普通属性,这样是为了兼容ES5,ES6里新增了 Object.getOwnPropertySymbols 用来检索符号值属性,不管符号值属性可不可枚举都能拿到。
ES6新数据类型Symbol的更多相关文章
- es6学习笔记--新数据类型Symbol
学习了es6语法的symbol类型,整理笔记,闲时复习. Symbol 是es6新增的第七种原始数据类型(null,string,number,undefined,boolean,object),是为 ...
- ES6中的新数据类型——Symbol
今天小编和大家来聊一聊es6中新增的一个原始数据类型Symbol.在es5中原始数据类型(基本数据类型)有以下六种:Undefind.Null.Bool. String.Number.Object.今 ...
- ES6新增数据类型Symbol
Symbol的含义? ES6(2015) 引入了第七种原始数据类型Symbol,Symbol英文文意思为 符号.象征.标记.记号,在 js 中更确切的翻译应该为独一无二的 Symbol的使用? Sym ...
- es6总结(六)--新数据类型-Symbol
- es6 新增数据类型Symbol
es6在string number boolean null undefined object之外又新增了一种Symbol类型. Symbol意思是符号,有一个特性—每次创建一个Symbol值都是不一 ...
- ES6新数据类型map与set
一.map,简单的键值对映射,具有很快的查找速度 1. 初始化map,map的键名可以使用其他数据类型,对象的属性名只能使用字符串或symbol 使用二维数组 var m = new Map([['n ...
- 16. js 判断变量类型,包括ES6 新类型Symbol
相信大家在开发中遇到需要判断变量类型的问题,js变量按存储类型可分为值类型和引用类型,值类型包括Undefined.String.Number.Boolean,引用类型包括object.Array.F ...
- 理解ES6的新数据类型:Symbol
ES6之前的数组类型 在ES6之前JS只有6种数据类型,分别是:Undefined.Null.布尔值(Boolean).字符串(String).数值(Number).对象(Object). ES6引入 ...
- ES6 新特性之Symbol
Symbol let s1 = Symbol('foo'); let s2 = Symbol('bar'); s1 // Symbol(foo) s2 // Symbol(bar) s1.toStri ...
随机推荐
- C#基础知识之事件和委托
本文中,我将通过两个范例由浅入深地讲述什么是委托.为什么要使用委托.委托的调用方式.事件的由来..Net Framework中的委托和事件.委托和事件对Observer设计模式的意义,对它们的中间代码 ...
- bzoj2600 [Ioi2011]ricehub 双指针
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=2600 题解 随便写一个比较简单的 two pointers 练习题. 首先答案肯定是一个原序列 ...
- VCL界面控件DevExpress VCL Controls发布v18.2.7|附下载
DevExpress VCL Controls是 Devexpress公司旗下最老牌的用户界面套包.所包含的控件有:数据录入,图表,数据分析,导航,布局,网格,日程管理,样式,打印和工作流等,让您快速 ...
- spring动态调用方法
有的时候为了程序的灵活性,需要根据参数动态的调用方法.代码框架大致spring为主,下面是具体代码: 接口: 实现类(实现类中有一个从spring容器中取的对象) 这是最初我直接用反射去调用的代码: ...
- 为何使用Shell脚本
为何使用Shell脚本 分类: linux shell脚本学习2012-09-12 17:18 78人阅读 评论(0) 收藏 举报 shell脚本任务工作 s h e l l 脚本在处 ...
- div 垂直居中的方法
方法一 .table-body>ul>li{ font-size: 0 } .table-body>ul>li:after { content: ''; width: 0; h ...
- mysql 语句积累
show tables; 显示表 DROP TABLE IF EXISTS emp;删除表
- Linux常用命令学习记录
兄弟连Linux培训 ,小编整理了常用的Linux学习命令: 1 cp 拷贝命令 参数:-p 文件属性一起拷贝 -r 拷贝文件夹 -d 软链信息等一起拷贝 -a 是-rdp的简写 2 find 文件查 ...
- BZOJ 3357: [Usaco2004]等差数列 动态规划
Code: #include<bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) # ...
- CF786B Legacy 线段树优化建图 + spfa
CodeForces 786B Rick和他的同事们做出了一种新的带放射性的婴儿食品(???根据图片和原文的确如此...),与此同时很多坏人正追赶着他们.因此Rick想在坏人们捉到他之前把他的遗产留给 ...