deep-in-es6(七)
Symbols对象 JavaScript的第七种原始类型
以前的数据类型:
Undefined 未定义
Null 空值
Boolean 布尔类型
Number 数字类型
String 字符串类型
Object 对象类型
前五种数据类型是有限的。Object对象类型是无限的。symbol是程序创建并且可以用作属性键的值,并且他能避免命名冲突的风险。
var mySymbol = Symbol();//它的值与其它的值完全不相等
字符串或者数字可以作为属性的键,Symbol也可以,他不等同于任何字符串,因而这个一Symbol为键的属性可以保证不与其他属性产生任何冲突。
var mySymbol = Symbol();//它的创建并没有new关键字
var obj = {};
obj[mySymbol] = "assassin";
console.log(obj[mySymbol]);//assassin 保证不会冲突
以symbol为键的属性与数组元素类似,访问时必须使用方括号访问这些属性。
typeof Symbol();//"symbol" symbol与其他对象不完全相像
symbol创建后就不可以变更,不能为其设置属性,它们可以使用做属性名称,这些性质一字符串类似。每一个symbol都是独一无二的不与其他的symbol等同,即使二者有相同的描述也不相等。
symbol注意:symbol不能自动转换成字符串,不能与字符串拼接,会得到TypeError。通过String(mySymbol)或者mySymbol.toString()可以转换成字符串。
获取symbol的三种方法
1.调用Symbol();这种方法每次的调用都会返回一个新的唯一的symbol
2.调用Symbol.for(string);这种方法会访问symbol注册表,其中存储了已经存在的一些列symbol。这种与Symbol()定义的独立mySymbol不同,第二种方法中的mySymbol是注册表中的,是共享的,如果你好多次调用Symbol.for("cat");都会返回相同的mySymbol,注册表非常有用,在多个web页面中或者同一个web页面中的多个模块经常需要共享一个mySymbol;
var obj2 = {};
var mySymbol1 = Symbol.for("aaa");
var mySymbol2 = Symbol.for("aaa");
console.log(obj2[ mySymbol1 ]+" "+obj2[ mySymbol2 ]);//undefined undefined
console.log(obj2[ mySymbol1 ] == obj2[ mySymbol2 ]);//true
3.使用标准定义的symbol,如:Symbol.iterator.
symbol在es6中的应用:
1.使用instanceof可扩展。表达式object instanceof constructor被指定为构造函数的一个方法:constructor[Symbol.hasInstance](object);这意味着它是可扩展的。
2.消除新特性和旧代码之间的冲突。添加某些ES6数组方法会破坏现有的Web网站.其他Web标准有相同的问题:想浏览器中添加新方法会破会原有的网站。问题主要由动态作用域引起,ES6引入一个特殊symbol(Symbol.unscopables),Web标准用这个symbol来阻止某些方法加入到动态作用域中。
3.支持新的字符串匹配类型。es5中str.match(myObject)会尝试将其转换成正则表达式对象(RegExp)。es6中他会检查myObject是否有一个myObject[Symbol.match](str)方法。现在的库可以提供自定义的字符串解析类。所有支持RegExp对象的环境都可以正常运行。
var mySymbol = Symbol();
var obj = {};
obj[mySymbol] = "assassin";
console.log(obj[mySymbol]);
var obj2 = {};
var mySymbol1 = Symbol.for("aaa");
var mySymbol2 = Symbol.for("aaa");
console.log(obj2[ mySymbol1 ]+" "+obj2[ mySymbol2 ]);//undefined undefined
console.log(obj2[ mySymbol1 ] == obj2[ mySymbol2 ]);//true
deep-in-es6(七)的更多相关文章
- 转载 Deep learning:七(基础知识_2)
前面的文章已经介绍过了2种经典的机器学习算法:线性回归和logistic回归,并且在后面的练习中也能够感觉到这2种方法在一些问题的求解中能够取得很好的效果.现在开始来看看另一种机器学习算法--神经网络 ...
- Deep Learning(深度学习)学习笔记整理系列之(七)
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...
- Deep Learning(深度学习)学习笔记整理系列之(五)
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...
- Deep Learning(深度学习)学习笔记整理系列之(八)
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...
- Deep Learning(深度学习)学习笔记整理系列之(六)
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...
- Deep Learning(深度学习)学习笔记整理系列之(四)
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...
- Deep Learning(深度学习)学习笔记整理系列之(三)
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...
- Deep Learning(深度学习)学习笔记整理系列之(二)
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...
- Deep Learning(深度学习)学习笔记整理系列之(一)
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-0 ...
- Deep Learning深入研究整理学习笔记五
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...
随机推荐
- @synchronized 再考察
核心是:将标示对象与锁建立关联. 线程 锁 标识: 异常: NSString *test = @"test"; @try { // Allocates a lock for ...
- Rman备份及不完全恢复操作
最后更新时间:2018/12/18 启用归档 --检查是否为归档 SQL> archive log list; Database log mode No Archive ...
- 用Python爬取影视网站,直接解析播放地址。
记录时刻! 写这个爬虫主要是想让自己的爬虫实用,把脚本放到了服务器,成为可随时调用的接口. 思路算是没思路吧!把影视名带上去请求影视网站,然后解析出我们需要的播放地址. 我也把自己的接口分享出来.接口 ...
- mesg---设置当前终端的写权限
mesg命令用于设置当前终端的写权限,即是否让其他用户向本终端发信息.将mesg设置y时,其他用户可利用write命令将信息直接显示在您的屏幕上. 语法 mesg(参数) 参数 y/n:y表示运行向当 ...
- 人在IT,关于计算机专业的杂谈PPT
- HDU 3277 Marriage Match III
Marriage Match III Time Limit: 4000ms Memory Limit: 32768KB This problem will be judged on HDU. Orig ...
- 洛谷 P1604 B进制星球
P1604 B进制星球 题目背景 进制题目,而且还是个计算器~~ 题目描述 话说有一天,小Z乘坐宇宙飞船,飞到一个美丽的星球.因为历史的原因,科技在这个美丽的星球上并不很发达,星球上人们普遍采用B(2 ...
- 11 hbase源码系列(十一)Put、Delete在服务端是如何处理
hbase源码系列(十一)Put.Delete在服务端是如何处理? 在讲完之后HFile和HLog之后,今天我想分享是Put在Region Server经历些了什么?相信前面看了<HTab ...
- !HDU 2602 Bone Collector--DP--(裸01背包)
题意:这题就是一个纯粹的裸01背包 分析:WA了好几次.01背包实现的一些细节没搞懂 1.为什么dp[i][j]赋初值为0而不是value[i].由于第i个石头可能不放! 2.在进行状态转移之前要dp ...
- Java 8 时间日期库的20个使用演示样例
除了lambda表达式,stream以及几个小的改进之外,Java 8还引入了一套全新的时间日期API,在本篇教程中我们将通过几个简单的任务演示样例来学习怎样使用Java 8的这套API.Java对日 ...