javascript - 为什么不使用 Object.prototype.toString() 来检查 redux 中的普通对象?

标签 javascript reactjs redux

我是 JavaScript 初学者。当我阅读 redux 源代码时,utils/isPlainObject.js 有一个片段如下:

export default function isPlainObject(obj) {
  if (typeof obj !== 'object' || obj === null) return false
  let proto = obj
  while (Object.getPrototypeOf(proto) !== null) {
    proto = Object.getPrototypeOf(proto)
  }
  return Object.getPrototypeOf(obj) === proto
}

在我看来,我可能会使用更简单的代码来实现它:

function isPlainObject(obj) {
  return Object.prototype.toString.call(obj, null) === '[object Object]'
}

那么,为什么 redux 不使用这个实现呢?

最佳答案

typeof obj !== '对象' || obj === null 等检查之所以被使用,是因为这是检查一个对象是否是普通的、没有为错误行为留下空间的最简单的方法。

除了 Object.prototype.toString 可以被覆盖并因此影响依赖它的代码之外,它的问题是它不检查对象是否是普通的:

Object.prototype.toString.call(new class Foo {}, null) === '[object Object]'

关于javascript - 为什么不使用 Object.prototype.toString() 来检查 redux 中的普通对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51590997/

相关文章:

javascript - 更新 jQuery 中变量的值

javascript - Bootstrap 3 为单个模态设置选项

reactjs - 如何: Use a React JS Environment

javascript - 使用 Object.assign 更新嵌套对象

angular - 添加StoreModule.forFeature(...)后无法访问存储的数据

typescript - 无法在 Redux + Typescript 连接组件中使用静态 getDerivedStateFromProps

javascript - 如何为动态网页创建google amp?

javascript - Jquery Ajax将数据传递到另一个php文件来更新数据库只允许更新一次(Wordpress)

reactjs - VS Code - 使用同一窗口打开文件并保留工作区

javascript - React - 异步等待异步问题