Symbol 应用

ES6第七种数据类型-----Symbol

一:创建的是唯一的值

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

应用1
 

// 作为属性名的使用
var mySymbol = Symbol();
// 第一种写法
var a = {};
a[mySymbol] = 'Hello!';
// 第二种写法
var a = { [mySymbol]: 'Hello!'};
// 第三种写法
var a = {};
Object.defineProperty(a, mySymbol, { value: 'Hello!' });
// 以上写法都得到同样结果
a[mySymbol] // "Hello!"

 应用2

// 只需定义一个唯一不同值,但不需追究名称时
// (1)没事用Symbol
var shapeType = { triangle: 'Triangle'};
function getArea(shape, options) { 
    var area = 0; 
    switch (shape) { 
      case shapeType.triangle:
      area = .5 * options.width * options.height; 
      break; 
    } 
    return area;
}
getArea(shapeType.triangle, { width: 100, height: 100 });
//(2)用Symbol
var shapeType = { triangle: Symbol()};
function getArea(shape, options) { 
    var area = 0; 
    switch (shape) { 
      case shapeType.triangle:
      area = .5 * options.width * options.height; 
      break; 
    } 
    return area;
}
getArea(shapeType.triangle, { width: 100, height: 100 });

二:Object.getOwnPropertySymbols

// 获取指定对象的所有 Symbol 属性名
var obj = {};
var key = Symbol('description');
obj[key] = 'data';
var symbols = Object.getOwnPropertySymbols(obj);
console.log(symbols[0].toString());
// Reflect.ownKeys(obj)//获取所有的属性名
Reflect.ownKeys(obj)

三:Symbol.for和Symbol.keyFor

// Symbol.for搜索有没有以该参数作为名称的Symbol值。
// 如果有,就返回这个Symbol值,否则就新建并返回一个以该字符串为名称的Symbol值。

// Symbol.keyFor
let s = Symbol.for("这个Symbol.keyFor");
console.log(Symbol.keyFor(s));

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值