Symbol

symbol 是一种基本数据类型。Symbol() 函数会返回 symbol 类型的值,该类型具有静态属性和静态方法。它的静态属性会暴露几个内建的成员对象;它的静态方法会暴露全局的 symbol 注册,且类似于内建对象类,但作为构造函数来说它并不完整,因为它不支持语法:"new Symbol()"。

每个从 Symbol() 返回的 symbol 值都是唯一的。一个 symbol 值能作为对象属性的标识符;这是该数据类型仅有的目的

const symbol1 = Symbol();
const symbol2 = Symbol(42);
const symbol3 = Symbol('foo');

console.log(typeof symbol1);
// "symbol"

console.log(symbol2 === 42);
// false

console.log(symbol3.toString());
// "Symbol(foo)"

console.log(Symbol('foo') === Symbol('foo'));
// false

语法

Symbol([description])

参数

description 可选

可选的,字符串类型。对 symbol 的描述,可用于调试但不是访问 symbol 本身。

描述

直接使用Symbol()创建新的 symbol 类型,并用一个可选的字符串作为其描述。

let sym1 = Symbol();
let sym2 = Symbol("foo");
let sym3 = Symbol("foo");

上面的代码创建了三个新的 symbol 类型。注意,Symbol("foo") 不会强制将字符串“foo”转换成 symbol 类型。它每次都会创建一个新的 symbol 类型:

Symbol("foo") === Symbol("foo"); 
// false

下面带有 new 运算符的语法将抛出 TypeError 错误 :

let sym = new Symbol();

// TypeError

这会阻止创建一个显式的 Symbol 包装器对象而不是一个 Symbol 值。围绕原始数据类型创建一个显式包装器对象从 ECMAScript 6 开始不再被支持。然而,现有的原始包装器对象,如 new Booleannew String以及new Number,因为遗留原因仍可被创建。

如果你真的想创建一个 Symbol 包装器对象 (Symbol wrapper object),你可以使用 Object() 函数:

let sym = Symbol("foo");
typeof sym; // "symbol"
let symObj = Object(sym);
typeof symObj; // "object"

其他方法可参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Symbol

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值