From 6c7b5e410c5fcca8a8e5ae988677f4e1bd20220c Mon Sep 17 00:00:00 2001 From: Ryan Grove Date: Wed, 7 Nov 2018 15:36:01 -0800 Subject: [PATCH] Treat `null` as a valid plain object prototype in `isPlainObject()` Fixes #1074 --- src/utils/isPlainObject.js | 11 +++++++---- test/utils/isPlainObject.spec.js | 1 + 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/utils/isPlainObject.js b/src/utils/isPlainObject.js index 3560c2ca0..0c74b6299 100644 --- a/src/utils/isPlainObject.js +++ b/src/utils/isPlainObject.js @@ -5,10 +5,13 @@ 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) + let proto = Object.getPrototypeOf(obj) + if (proto === null) return true + + let baseProto = proto + while (Object.getPrototypeOf(baseProto) !== null) { + baseProto = Object.getPrototypeOf(baseProto) } - return Object.getPrototypeOf(obj) === proto + return proto === baseProto } diff --git a/test/utils/isPlainObject.spec.js b/test/utils/isPlainObject.spec.js index f8addd779..9b173f216 100644 --- a/test/utils/isPlainObject.spec.js +++ b/test/utils/isPlainObject.spec.js @@ -17,5 +17,6 @@ describe('isPlainObject', () => { expect(isPlainObject(null)).toBe(false) expect(isPlainObject()).toBe(false) expect(isPlainObject({ x: 1, y: 2 })).toBe(true) + expect(isPlainObject(Object.create(null))).toBe(true) }) })