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 ...
随机推荐
- 前端之CSS介绍
CSS介绍 CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素. 当浏览器读到一个样式表,它就会按照这个样式表来对文档进行格式化(渲染). CSS的语法 CSS语 ...
- CentOS下安装SVN服务端
---恢复内容开始--- 1.使用yum安装 yum install subversion 2.创建仓库 1.创建成功后在svn下面多了几个文件夹. cd /home mkdir svn svnadm ...
- jquery中$.get()提交和$.post()提交有区别
jquery中$.get()提交和$.post()提交有区别吗? 相同点:都是异步请求的方式来获取服务端的数据: 异同点: 1.请求方式不同:$.get() 方法使用GET方法来进行异步请求的.$.p ...
- 洛谷—— P1036 选数 || Vijos——选数
https://vijos.org/p/1128|| https://www.luogu.org/problem/show?pid=1036#sub 描述 已知 n 个整数 x1,x2,…,xn,以及 ...
- jquery快速清除复选框、单选框的选中
$(":checked").attr("checked", "");
- ArcGIS api for javascript——地图配置-
描述 本例展示了如果删除缩放等级滑动器的刻度线.通过设置esriConfig里的sliderLabel为null来实现: esriConfig.defaults.map.sliderLabel = n ...
- AES加密解密在JAVA和ANDROID下互通
<span style="font-family: Arial, Helvetica, sans-serif;">昨天外包安卓的那个人说AES的加解密结果不一样.于是百 ...
- Codeforces 528A Glass Carving STL模拟
题目链接:点击打开链接 题意: 给定n*m的矩阵.k个操作 2种操作: 1.H x 横向在x位置切一刀 2.V y 竖直在y位置切一刀 每次操作后输出最大的矩阵面积 思路: 由于行列是不相干的,所以仅 ...
- 流水线技术原理和Verilog HDL实现
所谓流水线处理,如同生产装配线一样,将操作执行工作量分成若干个时间上均衡的操作段,从流水线的起点连续地输入,流水线的各操作段以重叠方式执行.这使得操作执行速度只与流水线输入的速度有关,而与处理所需的时 ...
- phpMyAdmin出现找不到mysql扩展和Cannot log in to the MySQL server问题
环境:Centos6.5,Apache2.4, PHP5.5, MySql5.6. phpMyAdmin版本:https://files.phpmyadmin.net/phpMyAdmin/4.4.1 ...