Checks if value is a plain object — created by the Object constructor, or one with a [[Prototype]] of null. Part of Lodash Lang (stable — not deprecated). Note: class instances, arrays, dates, and other builtins return false.
Pass the value you want to inspect or convert. Read the return type carefully before you use the result.
Syntax
Call _.isPlainObject. Start with this line.
Lodash
_.isPlainObject(value)
Call
What it does
_.isPlainObject(value)
Primary signature.
Prefer import isPlainObject from "lodash/isPlainObject" when you want a smaller bundle.
Library declarations
Lodash
_.isPlainObject(value)
Parameters
Parameter
Description
value
Required. Value to check
Return Value
Return Value
Description
*
true if plain object, else false
Lodash Examples
Example 1 — Official: Instances, Arrays, Literals, Null Proto
Plain options. Object literal merges over defaults.
Array. Not plain → return defaults unchanged.
null. Not plain → same safe fallback.
Why. Prevents accidental merges of non-config values.
Compatibility
Browser & Runtime Support
_.isPlainObject is a Lodash Lang helper available in 4.x (and earlier builds). It runs anywhere Lodash runs — modern browsers (via CDN or bundle) and Node.js / Bun / Deno with npm install lodash. Native engines have no single equivalent; people often approximate with prototype checks.
✓ Stable · Lodash 4.x
_.isPlainObject()
Available in [email protected] full builds and the lodash/isPlainObject modular import. Works in evergreen browsers and current Node LTS when Lodash is installed.
100%With Lodash 4.x
Google ChromeSupported · Desktop & Mobile
Full support
Mozilla FirefoxSupported · Desktop & Mobile
Full support
Apple SafariSupported · macOS & iOS
Full support
Microsoft EdgeSupported · Chromium
Full support
Internet ExplorerNo native support · Use a polyfill
Polyfill
OperaSupported · Modern versions
Full support
Samsung InternetSupported · Android
Full support
BunSupported · JavaScript runtime
Supported
DenoSupported · JavaScript runtime
Supported
Node.jsSupported · Server runtime
Supported
Android WebViewSupported · Modern WebView
Full support
_.isPlainObjectLodash 4.x
Bottom line: Safe for production once Lodash is on the page or in your bundle. Prefer import isPlainObject from "lodash/isPlainObject" for smaller builds. Ideal for validating options / config objects.
Frequently Asked Questions
_.isPlainObject(value) returns true when value is a plain object — created by the Object constructor, or one whose [[Prototype]] is null. Class instances, arrays, dates, and other builtins return false.
Custom constructors set the prototype to Foo.prototype, not Object.prototype. Lodash treats that as a class instance, not a plain dictionary.
Yes. Official docs: _.isPlainObject(Object.create(null)) is true — a null-prototype dictionary is still a plain record.
No. _.isObject is broad (arrays and functions pass). _.isPlainObject only accepts simple records that look like config bags or JSON-style hashes.
isObjectLike accepts any non-null typeof object value (arrays, dates, regexes). isPlainObject rejects those and keeps only plain dictionaries.
Use import isPlainObject from "lodash/isPlainObject" or require("lodash/isPlainObject") so bundlers can tree-shake unused Lodash code. Full build: import _ from "lodash" then _.isPlainObject.