如何将包含符号的数组转换为字符串?

bla*_*020 6 javascript arrays

我有一个可能包含Symbol()项目的数组。Array.toSring引发异常。

const s = [10, 'abc', Symbol('test')].toString(); // this throws an exception
console.log([10, 'abc', Symbol('test')]); // this works
Run Code Online (Sandbox Code Playgroud)

将此类数组转换为字符串的最佳方法是什么(就像console.log一样)?

Cer*_*nce 6

.map数组,首先调用toString每个符号:

const s = [10, 'abc', Symbol('test')]
  .map(val => typeof val === 'symbol' ? val.toString() : val)
  .join(',');
console.log(s);
Run Code Online (Sandbox Code Playgroud)

要将符号转换为字符串,您必须明确地这样做。

toString允许调用符号,因为它会调用Symbol.prototype.toString()

相反,尝试将Symbol隐式地转换为字符串,例如使用Array.prototype.join,(或Array.prototype.toString内部调用Array.prototype.join+,等)的,将调用ToString操作,该操作在参数为Symbol时抛出。