ES6:为什么符号不能有另一个符号作为描述



我正在学习Es6:符号。我正在玩它并尝试使用另一个符号作为描述创建一个符号:

var s = Symbol('foo');
console.log(s.toString()); //"Symbol(foo)"
var sS = Symbol(s); // <- thorws error
var sF = Symbol.for(s); // <- thorws error
console.log(s, sA);

我无法理解为什么它不让我使用现有的符号作为描述。当我运行上面的代码时,我看到以下控制台错误:

Uncaught TypeError: Cannot convert a Symbol value to a string
    at Function.for (native)

正如错误所说,它无法将符号转换为字符串。但是正如您在代码(第 2 行(中看到的那样,通过使用toString()函数,我能够转换字符串中的符号。谁能详细说明发生了什么?谢谢。

为什么不让我使用现有符号作为描述

仅仅因为所有描述都必须是字符串,没有别的。

错误说它无法将符号转换为字符串,但是通过使用toString()我可以将符号转换为字符串

是的,可以使用 toString 方法将符号显式转换为字符串并获取其说明。但是所有隐式转换都会引发异常 - 这是一个故意的功能,以防止我们不小心使用非唯一描述而不是符号,例如在使用属性键进行字符串连接时。

相关内容

最新更新