Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么不使用Object.prototype.toString()检查redux中的普通对象?_Javascript_Reactjs_Redux - Fatal编程技术网

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

Javascript 为什么不使用Object.prototype.toString()检查redux中的普通对象?,javascript,reactjs,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 =

我是一个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]'
}

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

typeofobj!='对象'| | obj===null
,等等。之所以使用检查,是因为这是检查对象是否简单的最简单的方法,不会为错误行为留下任何空间

除了可以重写
Object.prototype.toString
从而影响依赖它的代码这一事实之外,它的问题在于它不检查对象是否是普通的:

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

我认为你的主张是正确的——它也有同样的作用。然而,至于“为什么redux不使用它”,可能是因为他们只是测量了性能,结果发现在大多数情况下第一个更好。或者他们只是不加思考地使用它。您需要进行性能检查。或者问他们:)您可能想阅读确切的规范,这样您可能会发现两者之间的差异: