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…in,for..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

    原文作者:jyren_Rachel
    原文地址: https://segmentfault.com/a/1190000008704930
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞