A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from http://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Symbol/Symbol below:

Symbol() æž„é€ å‡½æ•° - JavaScript

Symbol() 构造函数

Baseline Widely available

Symbol() 构造函数返回一个 symbol 类型的值,但是它并不完全支持构造函数的语法,因为它不支持 new Symbol() 语法,也无法被子类化。它可以作为 class 定义中 extends 子句的值使用,但对它进行 super 调用将会导致异常。

尝试一下
const symbol1 = Symbol();
const symbol2 = Symbol(42);
const symbol3 = Symbol("foo");

console.log(typeof symbol1);
// Expected output: "symbol"

console.log(symbol2 === 42);
// Expected output: false

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

console.log(Symbol("foo") === Symbol("foo"));
// Expected output: false
语法
Symbol()
Symbol(description)

备注: Symbol() 只能在没有 new 的情况下调用,尝试用 new 构造会抛出 TypeError。

参数
description 可选

一个字符串,用来表示 symbol 的描述,可以用于调试,但不能直接访问 symbol 自身。

示例 创建 symbol

要创建一个新的原始 symbol,你可以传递一个可选的字符串作为 description 参数来创建 Symbol():

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

上面的代码创建了三个新的 symbol,注意 Symbol("foo") 不会将字符串 "foo" 强制转换成 symbol,而是每次总是创建一个新的 symbol:

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

下面带有 new 运算符的语法将会抛出一个 TypeError:

const sym = new Symbol(); // TypeError

这一限制是为了防止开发人员创建一个显式的 Symbol 包装对象,而不是一个新的 symbol 值。这可能会让人感到困扰,因为在通常情况下,可以创建基本数据类型的显式包装对象(例如 new Boolean、new String 和 new Number)。

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

const sym = Symbol("foo");
const symObj = Object(sym);
typeof sym; // "symbol"
typeof symObj; // "object"
规范 浏览器兼容性 参见

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4