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