我是一个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实现呢?
答案 0 :(得分:3)
typeof obj !== 'object' || obj === null
等之所以使用检查,是因为这是检查对象是否纯净的最简单方法,该空间不会留有错误行为的空间。
除了Object.prototype.toString
可以被覆盖并因此影响依赖于它的代码这一事实之外,它的问题在于它不检查对象是否简单:
Object.prototype.toString.call(new class Foo {}, null) === '[object Object]'