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

时间:2019-10-01 09:15:36

标签: javascript arrays

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

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

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

3 个答案:

答案 0 :(得分:6)

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

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

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

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

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

答案 1 :(得分:0)

只需将符号转换为字符串即可,而不是转换整个数组

const s = [10, 'abc', Symbol('test').toString];

答案 2 :(得分:0)

在对数组调用.toString()之前,可以在数组上执行一些小操作吗?像这样:

time                pid_count systemd_unit
----                --------- ------------
1569909600000000000 1         apache2
1569909600000000000 1         sshd

问题是我们不想在数组的每个项目上调用.toString()方法。