ES6 symbol类型详解

栏目: JavaScript · 发布时间: 6年前

内容简介:一、定义symbol类型是新的原始数据类型,表示独一无二的值,其他的原始数据类型还有Number,String,Boolean,Null,Undefined;Object属于复杂数据类型。二、参数

一、定义

symbol类型是新的原始数据类型,表示独一无二的值,其他的原始数据类型还有Number,String,Boolean,Null,Undefined;Object属于复杂数据类型。

二、参数

1、Symbol函数接受字符串作为参数,控制台输出时,比较容易区分。

2、Symbol函数的参数仅表示Symbol值得描述,相同的参数返回值也不一样

var a = Symbol('a'); 
var b = Symbol('a');
a === b   //false

3、Symbol.for()可以生成同一个Symbol值。

请输入代码
var a = Symbol.for('a'); 
var b = Symbol.for('a');
a === b   //true

Symbol.for()生成的名字是全局环境的,可以在不同的iframe中给取到值。

三、Symbol值作为对象

1、Symbol值作为属性名时不能使用点运算

2、定义属性时,必须放在方括号内,与普通键值进行区分。

var a = Symbol('a');
var obj = {
   a: 'normal key',
  [a]: 'symbol key'    
}

3、Symbol值定义的属性属于公开属性,普通方法无法遍历。

//如上例
Obj.getOwnProperty()   //['a']
Obj.getOwnPropertySymbols() //[Symbol('a')]

Refelect.ownKeys() // ['a', Symbol('a')]
  1. 利用Symbol的特性可定义内部私有属性或方法
function getObj (obj) {
   let privateKey = symbol('privateKey'),
       objCopy = ...obj || {};
   objCopy[privateKey] = function privateFunc () {
       console.log('privateFunc ')
   }
   return objCopy;
}

let newObj = getObj();
newObj[privateKey]  // 报错,外部无法获取到privateKey的值
newObj[symbol('privateKey')]  //undefined,此时的symbol已经变成新的symbol值

三、注意点

1、Symbol值不能进行隐式转换,因此它与其他类型的值进行运算,会报错。

  1. Symbol值可显示地转换成字符串。
var a = Symbol('a');
a.toString()   // 'Symbol(a)'
  1. 可以显示或隐式转成Boolen,却不能转成数值。
var a = Symbol('a');
Boolean(a)  //true
if (a) { 
   console.log(a);
}   //Symbol('a') 打印出来地Symbol值会带上参数,便于区分

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

大数据

大数据

涂子沛 / 广西师范大学出版社 / 2013-4-1 / 49.90元

公布官员财产美国是怎么做的,美国能让少部人腐败起来吗,美国式上访是怎么回事,凭什么美国矿难那么少,全民医改美国做得到吗,美国总统大选有什么利器才能赢,下一轮全球洗牌我们世界工厂会被淘汰吗…… 除了上帝,任何人都必须用数据来说话。 大数据浪潮,汹涌来袭,与互联网的发明一样,这绝不仅仅是信息技术领域的革命,更是在全球范围启动透明政府、加速企业创新、引领社会变革的利器。现代管理学之父德鲁克有......一起来看看 《大数据》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

在线进制转换器
在线进制转换器

各进制数互转换器

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试