检测对象是否使用默认的 toString() 函数或自定义覆盖的 toString() 函数

Joh*_*zle 4 javascript typescript

我有一个函数,它应该检查一个对象是否有一个toString()函数并输出它或以其他方式返回该对象。问题是,它也会在平面对象上触发并最终[Object object]作为一个字符串返回,这在 GUI 上显然看起来很糟糕。有没有办法确定对象是否使用toString()返回丑陋的默认方法[Object object]或具有toString()返回漂亮字符串的自定义函数。

这是我目前的功能:

(data: any) => (data != null && typeof data.toString === 'function') ? data.toString() : data;
Run Code Online (Sandbox Code Playgroud)

Sur*_*yan 5

1)你可以比较Object.prototype.toString。如果没有被覆盖,则引用是相等的

const obj1 = {};
console.log(obj1.toString === Object.prototype.toString);

const obj3 = { toString() { } };
console.log(obj3.toString === Object.prototype.toString);
Run Code Online (Sandbox Code Playgroud)

2)您可以通过以下方式检查存在 hasOwnProperty

const obj1 = {};
console.log(obj1.hasOwnProperty('toString'));

const obj3 = { toString() { } };
console.log(obj3.hasOwnProperty('toString'));
Run Code Online (Sandbox Code Playgroud)