10 Symbol
Symbol
书中讲了2部分。
- Symbol()
- Symbol 属性值.
完全两种画风的东西.
1. Symbol
首先他是一种全新的值. 不属于以前的任何一种
ES6引入了一种新的原始数据类型Symbol,表示独一无二的值。它是JavaScript语言的第七种数据类型,前六种是:Undefined、Null、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)
他是一种不会重复的值.
h.w(' Basic ');
h.w('line');
var a = Symbol();
var b = Symbol();
h.w(a == b); //false
var c = Symbol('c');
var d = Symbol('c');
h.w(c == d); //false
后面那个参数对于值,并没有什么卵用。
它始终会生成不一样的值。
是对于 Symbol 的一种描述。 你总的知道他是做什么的把.
它就是一种不回重复的标识。
所以他不可以用于 计算,字符串拼接等等.
如果转换为 boolean 始终为 true
var a = Symbol();
if(a)
h.w(true); //true
Boolean(a) //true
有时候会想使用相同的值。
var e = Symbol('foo');
var f = Symbol.for('foo');
var g = Symbol.for('foo');
h.w(e == f); //false
h.w(g == f); //true
就用for。 他会寻找之前是有已经有了。 如果有了就返回一样的。
h.w(Symbol.keyFor(f)); //foo
h.w(Symbol.keyFor(e)); //undefined
keyFor就是返回 已经标记过的描述
它是唯一不会重复的。
第一感觉就是用于常量。
var dataConfig = 'xxx'
然后经常被人直接
function a(key)
{
if(key == 'xxx') {}
}
有了这个之后,必须给我找到常量。
还有就是可以免去命名的烦恼。
书中讲了属性遍历。
var obj = {};
var a = Symbol('a');
var b = Symbol('b');
obj[a] = 'Hello';
obj[b] = 'World';
var objectSymbols = Object.getOwnPropertySymbols(obj);
h.w(obj[objectSymbols[0]]); //Hello
h.w(obj[objectSymbols[1]]); //World
h.w(objectSymbols[0] === a) //true
这样就可以查找到 Symbol
你通过其他方式是不行的。
for(var key in obj)
{
h.w(key);
}
直接跳过了 Symbol 参数.
书中说可以用他来实现一些特殊的功能..
不过我并没有看出他的特别,用其他方式的也能实现啊。
或许等我 理解更深入一点儿就能明白。
var size = Symbol('size');
class Collection {
constructor() {
this[size] = 0;
}
add(item) {
this[this[size]] = item;
this[size]++;
}
static sizeOf(instance) {
return instance[size];
}
}
var x = new Collection();
Collection.sizeOf(x) // 0
x.add('foo');
Collection.sizeOf(x) // 1
Object.keys(x) // ['0']
Object.getOwnPropertyNames(x) // ['0']
Object.getOwnPropertySymbols(x) // [Symbol(size)]
2. Symbol 属性
Symbol的属性和 Symbol完全就是两个画风.
感觉一点儿联系都没有..
比如
class MyClass {
[Symbol.hasInstance](foo) {
return foo instanceof Array;
}
}
[1, 2, 3] instanceof new MyClass() // true
原本不支持 instanceof.
你用了这个以后就支持了.
- Symbol.hasInstance (重载 instanceof. )
- Symbol.isConcatSpreadable (arr.concat 是否展开.)
- Symbol.species
- Symbol.match
- Symbol.replace
- Symbol.search
- Symbol.split
- Symbol.iterator (写一个方法支持默认的 for of 循环)
- Symbol.toPrimitive (当该对象被转为原始类型的值,触发)
- Symbol.toStringTag
- Symbol.unscopables
10 Symbol的更多相关文章
- ES6入门九:Symbol元编程
JS第七种数据类型:Symbol Symbol的应用场景 11个Symbol静态属性 Symbol元编程 一.JS第七种数据类型:Symbol 在ES6之前的JavaScript的基本数据类型有und ...
- ECMAScript 6 扫盲
ECMAScript 6 目前基本成为业界标准,它的普及速度比 ES5 要快很多,主要原因是现代浏览器对 ES6 的支持相当迅速,尤其是 Chrome 和 Firefox 浏览器,已经支持 ES6 中 ...
- ES6入门笔记
ES6入门笔记 02 Let&Const.md 增加了块级作用域. 常量 避免了变量提升 03 变量的解构赋值.md var [a, b, c] = [1, 2, 3]; var [[a,d] ...
- ASP.NET Core的配置(2):配置模型详解
在上面一章我们以实例演示的方式介绍了几种读取配置的几种方式,其中涉及到三个重要的对象,它们分别是承载结构化配置信息的Configuration,提供原始配置源数据的ConfigurationProvi ...
- 【WEB前端】使用百度ECharts,绘制项目质量报表
一.下载ECharts的js库 下载地址:http://echarts.baidu.com/download.html 由于我们对体积无要求,所以我们采用了完整版本,功能齐全,在项目中,我们只需要像普 ...
- ArcGIS API for Silverlight代码中使用Template模板
原文:ArcGIS API for Silverlight代码中使用Template模板 在项目开发中,会遇到点选中聚焦闪烁效果,但是因为在使用Symbol的时候,会设置一定的OffSetX和OffS ...
- ES6 扫盲
原文地址:ECMAScript 6 扫盲--小胡子 1. let.const 和 block 作用域 let 允许创建块级作用域,ES6 推荐在函数中使用 let 定义变量,而非 var: var a ...
- es6的新内容
前端学习总结(十八)ES6--新一代的javascript 发表于2016/6/11 21:44:27 2733人阅读 分类: javascript 简介 ECMAScript 6(以下简称ES6) ...
- 前端MVC Vue2学习总结(七)——ES6与Module模块化、Vue-cli脚手架搭建、开发、发布项目与综合示例
使用vue-cli可以规范项目,提高开发效率,但是使用vue-cli时需要一些ECMAScript6的知识,特别是ES6中的模块管理内容,本章先介绍ES6中的基础与模块化的内容再使用vue-cli开发 ...
随机推荐
- fastjson 混淆注意事项
使用fastjson 注意事项,主要表现: 1.加了符号Annotation 的实体类,一使用就会奔溃 2.当有泛型属性时,一使用就奔溃 在调试的时候不会报错,当你要打包签名混淆包的时候,就会出现上述 ...
- 模块化之Spring3.0 web fragment和gradle构建项目
1.背景 模块化开发很久以前就开始普及的概念.但是到了企业实际情况中,真正把模块化作为系统架构的核心的不多.或者说对模块化有这个意识,但是具体到底该如何实现,有些模糊,同时也许因为项目紧.任务中. ...
- Ubuntu搭建NFS
NFS全称是Network File System,网络文件系统.它可以通过网络实现文件共享.其结构图大概是这样的: 在机器E上开启NFS服务,机器ABCD都挂载NFS,这样可以实现机器ABCD共享文 ...
- shell 脚本之 shell 练习题汇总
整理了一些 shell 相关的练习题,记录到这里. 1. 请按照这样的日期格式 xxxx-xx-xx 每日生成一个文件,例如:今天生成的文件为 2013-09-23.log, 并且把磁盘的使用情况写到 ...
- RHEL6.3系统安装
进入安装界面 这里选择跳过 点击下一步 选择安装语言 选择键盘 选择系统储存方式 选择是否格式化储存设备 给安装的系统一个计算机名 选择时区 给ro ...
- 域普通用户执行金蝶K/3权限不够解决方法
一.问题 公司财务部的机器加入域后,用户一直授予本地管理员的权限,主管坚持要撤销管理员权限,而金蝶K3没管理员权限又无法执行. 报错信息为“注册表许可权不够,请参考安装目录的帮助档案进行许可权的配置. ...
- monkey之monkey命令详解
四大类-- 常用选项.事件选项.约束选项.调试选项 1.常用选项 --help:打印帮助信息 -v:指定打印信息的详细级别,一个-v增加一个级别 ,默认级别为 0 .用于指定反馈信息级别(信息级别就是 ...
- 搭建php环境哪家强
http://www.bubuko.com/infodetail-791030.html
- js 页面刷新location.reload和location.replace的区别小结
reload 方法,该方法强迫浏览器刷新当前页面. 语法: location.reload([bForceGet]) 参数: bForceGet, 可选参数, 默认为 false,从客户端缓存里取当前 ...
- [LeetCode] Design Hit Counter 设计点击计数器
Design a hit counter which counts the number of hits received in the past 5 minutes. Each function a ...