ES6 symbol类型详解
栏目: JavaScript · 发布时间: 5年前
内容简介:一、定义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')]
- 利用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值不能进行隐式转换,因此它与其他类型的值进行运算,会报错。
- Symbol值可显示地转换成字符串。
var a = Symbol('a'); a.toString() // 'Symbol(a)'
- 可以显示或隐式转成Boolen,却不能转成数值。
var a = Symbol('a'); Boolean(a) //true if (a) { console.log(a); } //Symbol('a') 打印出来地Symbol值会带上参数,便于区分
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Redis 入门-数据类型:3 种特殊类型详解
- Elasticsearch Nested 类型深入详解
- Redis数据类型与常用操作详解
- ES 系列(三):ES 的数据类型详解
- 测者的测试技术手册:Junit单元测试遇见的一个枚举类型的坑(枚举类型详解)
- golang语言渐入佳境[21]-string类型详解
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Effective STL中文版
[美]Scott Meyers / 潘爱民、陈铭、邹开红 / 清华大学出版社 / 2006-1 / 30.00元
STL是C++标准库的一部分。本书是针对STL的经验总结,书中列出了50个条款,绝大多数条款都解释了在使用STL时应该注意的某一个方面的问题,并且详尽地分析了问题的来源、解决方案的优劣。一起来看看 《Effective STL中文版》 这本书的介绍吧!