ES6 symbol范例详解

一、定义
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')]

4、应用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值不能举行隐式转换,因而它与其他范例的值举行运算,会报错。

2、Symbol值可显现地转换成字符串。

var a = Symbol('a');
a.toString()   // 'Symbol(a)'

3、能够显现或隐式转成Boolen,却不能转成数值。

var a = Symbol('a');
Boolean(a)  //true
if (a) { 
   console.log(a);
}   //Symbol('a') 打印出来地Symbol值会带上参数,便于辨别
    原文作者:程序媛的自我修炼
    原文地址: https://segmentfault.com/a/1190000019234291
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞