Javascript 什么是普通物体?

Javascript 什么是普通物体?,javascript,redux,Javascript,Redux,在JS中,特别是对于redux,什么是普通对象 let a = { b: { c: 'd' } }; 例如,以下内容是否也被视为普通对象 let a = { b: { c: 'd' } }; Redux声明操作必须是普通对象,但是如果我在一段时间后提交了以下数据,并且需要将其添加到状态,该怎么办 let payload = { all: ['john', 'jane'], byId: { john: { name: 'john',

在JS中,特别是对于redux,什么是普通对象

let a = {
  b: {
    c: 'd'
  }
};
例如,以下内容是否也被视为普通对象

let a = {
  b: {
    c: 'd'
  }
};
Redux声明操作必须是普通对象,但是如果我在一段时间后提交了以下数据,并且需要将其添加到状态,该怎么办

let payload = {
  all: ['john', 'jane'],
  byId: {
    john: {
      name: 'john',
      age: 23
    },
    jane: {
      name: 'jane',
      age: 40
    }
  }
}
我想采取行动:

function userLoad(payload) {
  return { type: USER_LOAD, payload }
}

但是,如果有效载荷不是一个简单的对象,这就不是一个好的实践。如何处理此类情况。

好的,因此它被视为普通对象,请参见下面的代码片段

函数isPlainObject(obj){
if(typeof obj!='object'| | obj===null)返回false
设proto=obj
while(Object.getPrototypeOf(proto)!==null){
proto=Object.getPrototypeOf(proto)
}
返回Object.getPrototypeOf(obj)==proto
}
设obj={
a:{
b:‘sss’,
c:['ss','sss']
}
}
console.log(isPlainObject(obj))普通对象或POJO(普通javascript对象)是通过以下方式创建的对象:

let foo={prop1:1}//object literal

让bar=新对象();//新对象语法
redux用于检查是否有普通对象的函数可能很有用:但如果该对象引用了其他普通对象,它是否仍被视为POJO呢?使用上述函数进行的一些测试给了我正确的答案,所以我会说是的。我会说是的,POJO具有对象对象的原型POJO的主要目的是提高复制效率和可预测性,如果不是某个时候,可能会出现深度复制性能问题(还请注意)