我想知道如何区分对象文字和json对象,以及其他对象,如Date,Function等。
由于typeof
运算符和instanceof Object
运算符对两个对象都返回true,是否有办法区分它们?
PS: 我不想通过反向排除Date和Function来做到这一点,因为它不能处理Date或Function以外的情况。
答案 0 :(得分:2)
所有非基本体都是对象,但并非所有对象都是日期或函数。不用检查instanceof Object
,而是检查instanceof Date
或instanceof Function
:
const obj = {};
const date = new Date();
const fn = () => 'foo';
console.log(date instanceof Date);
console.log(obj instanceof Date);
console.log(fn instanceof Function);
console.log(obj instanceof Function);
和json对象
答案 1 :(得分:0)
如果您只想复制一个Javascript对象(包括数组,因为它们也是对象),但要排除无效的JSON对象(例如Date
,Function
s),等),最简单的方法之一就是将Javascript对象转换为JSON字符串,然后重新解析它:
function deepCopy(input){
const json = JSON.stringify(input);
return JSON.parse(json);
}
const obj1 = { "hello": "world" };
const obj2 = deepCopy(obj1);
// obj1 and obj2 are two distinct objects
obj1["hello"] = "bye";
console.log( obj2["hello"] ); // world
// this works for arrays too
const a = [1, 2, [3, 4]];
const b = deepCopy(a);
注意:请注意,即使它可行,也不是最佳解决方案(尤其是由于性能问题)。
您还可以编写一个函数,其目的是分析Javascript对象,以查看它是否可以是有效的JSON对象(即,其中仅包含基元和数组的纯对象)。这样,您就可以区别于Date
和其他“复杂”对象。看一下JSON规范(或Wikipedia),以了解JSON支持哪些数据类型。