基本数据类型--Symbol

161 阅读1分钟

「这是我参与11月更文挑战的第17天,活动详情查看:2021最后一次更文挑战

Symbol基本使用

ES6引入了一种新的原始数据类型Symbol, 表示独一无二的值。它是 JavaScript语言的第七种数据类型,是一种类似于字符串的数据类型。

Symbol特点

  1. Symbol的值是唯一的,用来解决命名冲突的问题
let s2=Symbol('miss');
let s3=Symbol('miss');
console.log(`s2===s3:${s2===s3}`);
// false

image.png
2) Symbol 值不能与其他数据进行运算

//不能与其他数据进行运算
let str2 =Symbol();
// Uncaught TypeError: Cannot convert a Symbol value to a number
// 未捕获类型错误:无法将符号值转换为数字
let result1=str2+100;
let result2=str2>100;
let result3=str2+str2;

image.png
3) Symbol 定义的对象属性不能使用for..in 循环遍历,但是可以使用Reflect.ownKeys来获取对象的所有键名

基本使用

Symbol 函数栈不能用 new 命令,因为 Symbol 是原始数据类型,不是对象。可以接受一个字符串作为参数,为新创建的 Symbol 提供描述,用来显示在控制台或者作为字符串的时候使用,便于区分。

let str1 =Symbol();
console.log(str1,typeof str1);
// Symbol() "symbol"
let str3 =Symbol("st");
console.log(str3);
// Symbol(st)

image.png

Symbol常见方法

Symbol.for()

Symbol.for() 类似单例模式,首先会在全局搜索被登记的 Symbol 中是否有该字符串参数作为名称的 Symbol 值,如果有即返回该 Symbol 值,若没有则新建并返回一个以该字符串参数为名称的 Symbol 值,并登记在全局环境中供搜索。注:当两个均用Symbol.for()创建时则相等,不存在传递性。

//Symbol.for创建
let s4=Symbol('look');
let s5=Symbol.for('look');
console.log(`s4===s5:${s4===s5}`);
let s6=Symbol.for('look')
console.log(`s5===s6:${s5===s6}`);
console.log(`s4===s6:${s4===s6}`);

image.png

Symbol.keyFor()

Symbol.keyFor() 返回一个已登记的 Symbol 类型值的 key ,用来检测该字符串参数作为名称的 Symbol 值是否已被登记。注:一定要用Symbol.for()创建后才能用keyFor()函数,不然会显示未定义!

let str5 = Symbol.for("keyfor");
console.log(Symbol.keyFor(str5)); 
let str6 = Symbol("keyfortest");
console.log(Symbol.keyFor(str6));

image.png