我有一个可能包含Symbol()项目的数组。 Array.toSring引发异常。
const s = [10, 'abc', Symbol('test')].toString(); // this throws an exception
console.log([10, 'abc', Symbol('test')]); // this works
将此类数组转换为字符串的最佳方法是什么(就像console.log一样)?
答案 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()方法。