开发技巧中写了判断是否为json:
Object.prototype.isJSON = function(v) {
if(typeof v==='object' && Object.prototype.toString.call(v).toLowerCase()==='[object object]' && !v.length) {
return true;
}
return false;
}
console.log(Object.isJSON({})); // true
这个函数有问题,首先,这个例子就不对。随便一个普通对象都可以输出true。
Object.isJSON({a:1})//true
其次,修改 Object.prototype 是不推荐的,因为这可能会导致与其他代码库的冲突,特别是当这些库或框架不期望 Object.prototype 被修改时。
我平时使用的方案是用json解析,能解析,就是json,用try/catch包裹起来。
下面是文心一言的方案:
function isLikelyFromJSON(obj) {
try {
const jsonString = JSON.stringify(obj);
const parsedObj = JSON.parse(jsonString);
return deepEqual(obj, parsedObj); // 需要一个deepEqual函数来比较对象是否相等
} catch (e) {
return false; // 如果无法序列化或解析,则假定不是来自JSON的对象
}
}