我是 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/