ES6中 Symbol 个人总结

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/fufu_dclt/article/details/102697815

概述

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() 取到。

待更…

猜你喜欢

转载自blog.csdn.net/fufu_dclt/article/details/102697815