ES6: Symbol

发布时间:2019-08-09 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了ES6: Symbol脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

Symbol的出现是因为没有可以用来表示唯一的标识符,所以从根本上止属性名的冲突,所以引入了Symbol。所以对象的属性名可以有两种类型,一种是通常的字符串,另一种是新增的Symbol类型
Symbol是一种新的原始数据类型,用Symbol函数生成,用typeof运算符的结果是'symbol'。它是一种原始数据类型,不是对象,所以Symbol函数前不能用new命令。而且Symbol值不能与其他类型的值进行运算。

// 没有参数的情况
VAR s1 = Symbol();
var s2 = Symbol();

s1 === s2 // false

// 有参数的情况
var s1 = Symbol('foo');
var s2 = Symbol('foo');

s1 === s2 // false

当Symbol值作为对象属性名时,不能用点运算符

var mySymbol = Symbol();
var a = {};

a.mySymbol = 'Hello!';
a[mySymbol] // undefined
a['mySymbol'] // "Hello!"

Symbol作为属性名,是不会被for...infor..of,Object.keys(), Object.getOwnPropertynames,JSON.stringify()解析的,但是它有一个私有属性: Object.getOwnPropertySymbols,这个可以获取Symbol的属性名。另外Reflect.ownKeys 这个方法可以获取所有类型的属性名。

Symbol的方法

Symbol.for():可以使用同一个symbol值,它接受一个字符串作为参数,然后搜索有没有以该参数作为名称的Symbol值。

var s1 = Symbol.for('foo');
var s2 = Symbol.for('foo');

s1 === s2 // true

Symbol.for("bar") === Symbol.for("bar")
// true

Symbol("bar") === Symbol("bar")
// false

Symbol.keyFor(): 返回一个已经登记的Symbol类型的key值

hasInstance
isConcatSpreadable
sPEcies
match
replace
seArch
splIT
iterator
toPRimitive
unscopables

脚本宝典总结

以上是脚本宝典为你收集整理的ES6: Symbol全部内容,希望文章能够帮你解决ES6: Symbol所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。