如何在Javascript中显示符号

How are symbols displayed in Javascript?

本文关键字:显示 符号 Javascript      更新时间:2023-09-26

如果我说sym1 = Symbol();, Symbol函数是否像下面的g函数一样工作,

> g = function(){
|     return 2; //return some random unique value based on some internal algo
| }
    g()
> var sym1 = g();
> sym1
    2

现在,当我执行var sym1 = Symbol();,并记录sym1时,控制台显示Symbol(),而不是显示Symbol函数返回的值。

所以我的问题是:Symbol函数是如何工作的?当您输入sym1时,控制台如何能够显示Symbol()而不是某些值?我们能写出这样的函数吗?

是的,Symbol只是一个函数,类似于1任意的function g() { return something }

但是,与您问题中的示例g不同,它不返回数字,而是符号,这是ES6中的新基本值类型。

当我输入sym1时,控制台显示Symbol(),而不是显示函数Symbol返回的值。

你认为返回的值是什么,你认为它应该如何显示?

您的g函数返回的数字只是64位2的一些集合。以某种方式3,控制台从中派生一个以10为基数的字符串,以显示您所期望的数字。

现在,什么是符号?它只是一个有标识的值,我们甚至不知道它是如何实现的。目前还不清楚如何显示,或者是否会显示。它不是一个数字,也不是一个字符串。也许是id4之类的?

然而,

ES6已经采取了预防措施,每个符号都被赋予一个描述字符串5,可以作为可选参数传递给Symbol函数。此外,ES6也在§19.4.3.2中指定了符号应该如何显示为字符串。这就是控制台通常使用的。

这个"描述性字符串"很像对Symbol的调用,例如

var sym1 = Symbol("my description");
console.log(sym1.toString()); // "Symbol(my description)"
console.log(sym1); // Symbol(my description)6
var sym2 = Symbol();
console.log(sym2.toString()); // "Symbol()"
console.log(sym2); // Symbol()6

1:然而,它是一个普通函数,而不是构造函数,不能用new调用。
2:加上某种类型信息,它是一个数字,给64位一个意义
3:明确地说,控制台可能在遇到数字
时使用.toString作为数字。4: Chrome显示这样的每个对象,当你采取堆快照与开发工具,例如
5:是的,它比唯一标识
更重要6:实现依赖,取决于你的console

window['Symbol']函数是否像下面的函数g一样工作,

不确定实际问题?虽然,出现"no"

这里是混乱,当我说,> sym1控制台显示Symbol()而不是显示函数Symbol

返回的值

Symbol()不返回 function,而是返回"唯一且不可变的数据类型,可以用作标识符"

看到象征

symbol是唯一且不可变的数据类型,可以用作对象属性的标识符。符号对象是隐式的符号原语数据类型的对象包装器。

var sym = Symbol("foo");
var obj = {};
obj[sym] = 1;
console.log(obj.sym); // `undefined`
console.log(Object.keys(obj)) // `[]`
console.log(obj[sym]); // `1`

参见ES6 In Depth: Symbols