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(七)的更多相关文章

  1. 转载 Deep learning:七(基础知识_2)

    前面的文章已经介绍过了2种经典的机器学习算法:线性回归和logistic回归,并且在后面的练习中也能够感觉到这2种方法在一些问题的求解中能够取得很好的效果.现在开始来看看另一种机器学习算法--神经网络 ...

  2. Deep Learning(深度学习)学习笔记整理系列之(七)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  3. Deep Learning(深度学习)学习笔记整理系列之(五)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  4. Deep Learning(深度学习)学习笔记整理系列之(八)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  5. Deep Learning(深度学习)学习笔记整理系列之(六)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  6. Deep Learning(深度学习)学习笔记整理系列之(四)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  7. Deep Learning(深度学习)学习笔记整理系列之(三)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  8. Deep Learning(深度学习)学习笔记整理系列之(二)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  9. Deep Learning(深度学习)学习笔记整理系列之(一)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0  2013-0 ...

  10. Deep Learning深入研究整理学习笔记五

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

随机推荐

  1. @synchronized 再考察

    核心是:将标示对象与锁建立关联. 线程 锁 标识: 异常: NSString *test = @"test"; @try {     // Allocates a lock for ...

  2. Rman备份及不完全恢复操作

    最后更新时间:2018/12/18 启用归档 --检查是否为归档 SQL> archive log list; Database log mode              No Archive ...

  3. 用Python爬取影视网站,直接解析播放地址。

    记录时刻! 写这个爬虫主要是想让自己的爬虫实用,把脚本放到了服务器,成为可随时调用的接口. 思路算是没思路吧!把影视名带上去请求影视网站,然后解析出我们需要的播放地址. 我也把自己的接口分享出来.接口 ...

  4. mesg---设置当前终端的写权限

    mesg命令用于设置当前终端的写权限,即是否让其他用户向本终端发信息.将mesg设置y时,其他用户可利用write命令将信息直接显示在您的屏幕上. 语法 mesg(参数) 参数 y/n:y表示运行向当 ...

  5. 人在IT,关于计算机专业的杂谈PPT

  6. HDU 3277 Marriage Match III

    Marriage Match III Time Limit: 4000ms Memory Limit: 32768KB This problem will be judged on HDU. Orig ...

  7. 洛谷 P1604 B进制星球

    P1604 B进制星球 题目背景 进制题目,而且还是个计算器~~ 题目描述 话说有一天,小Z乘坐宇宙飞船,飞到一个美丽的星球.因为历史的原因,科技在这个美丽的星球上并不很发达,星球上人们普遍采用B(2 ...

  8. 11 hbase源码系列(十一)Put、Delete在服务端是如何处理

    hbase源码系列(十一)Put.Delete在服务端是如何处理?    在讲完之后HFile和HLog之后,今天我想分享是Put在Region Server经历些了什么?相信前面看了<HTab ...

  9. !HDU 2602 Bone Collector--DP--(裸01背包)

    题意:这题就是一个纯粹的裸01背包 分析:WA了好几次.01背包实现的一些细节没搞懂 1.为什么dp[i][j]赋初值为0而不是value[i].由于第i个石头可能不放! 2.在进行状态转移之前要dp ...

  10. Java 8 时间日期库的20个使用演示样例

    除了lambda表达式,stream以及几个小的改进之外,Java 8还引入了一套全新的时间日期API,在本篇教程中我们将通过几个简单的任务演示样例来学习怎样使用Java 8的这套API.Java对日 ...