ES6 关于 symbol 数据类型

概述

Symbol 是 ES6 新引入的原始数据类型。
它表示独一无二的值,因此一般用来定义唯一的属性名,防止属性名冲突。

用法

基本用法:

let sy = Symbol("KK");
console.log(sy);   // Symbol(KK)
typeof(sy);        // "symbol"
// 相同参数 Symbol() 返回的值不相等
let sy1 = Symbol("kk"); 
sy === sy1;       // false

sy 和 sy1 的返回值参数相同,但它们是不相等的。
Symbol 的值不能与其他类型的值进行运算,会报错。

属性名用法:

let sy = Symbol("key1");

// 写法1
let syObject = {};
syObject[sy] = "kk";
console.log(syObject);    // {Symbol(key1): "kk"}
// 写法2
let syObject = {
  [sy]: "kk"
};
console.log(syObject);    // {Symbol(key1): "kk"}
// 写法3
let syObject = {};
Object.defineProperty(syObject, sy, {value: "kk"});
console.log(syObject);    // {Symbol(key1): "kk"}

由于它的值不相等,当作为对象的属性名时,可以保证属性不重名,防止改写或覆盖。
作为对象属性名时不能用 . 运算符,要用方括号 [ ]。

syObject[sy];  // "kk"
syObject.sy;   // undefined

定义常量:

const COLOR_RED = Symbol("red");
const COLOR_YELLOW = Symbol("yellow");
const COLOR_BLUE = Symbol("blue");

使用 Symbol 定义常量,可以保证一组内常量的值都不相等。

属性名遍历:

const obj = {};
let a = Symbol('a');
let b = Symbol('b');
obj[a] = 'Hello';
obj[b] = 'World';
const objectSymbols = Object.getOwnPropertySymbols(obj);
objectSymbols
// [Symbol(a), Symbol(b)]

Symbol 值作为属性名时,该属性是公有属性不是私有属性,可以在类的外部访问。
不会出现在 for…in 、 for…of 的循环中,也不会被 Object.keys() 、 Object.getOwnPropertyNames() 返回。
如果要读取到一个对象的 Symbol 属性,可以通过Object.getOwnPropertySymbols() 和 Reflect.ownKeys() 取到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值