Last active
September 17, 2018 09:26
-
-
Save Natumsol/3fa8d4e47ff3bbc7a57c17dc65c626f2 to your computer and use it in GitHub Desktop.
check POJO(Plain Old Javascript Object)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /** | |
| * @param {any} obj The object to inspect. | |
| * @returns {boolean} True if the argument appears to be a plain object. | |
| */ | |
| 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 to test if an object is a plain object, i.e. is constructed | |
| ** by the built-in Object constructor and inherits directly from Object.prototype | |
| ** or null. Some built-in objects pass the test, e.g. Math which is a plain object | |
| ** and some host or exotic objects may pass also. | |
| ** | |
| ** @param {} obj - value to test | |
| ** @returns {Boolean} true if passes tests, false otherwise | |
| */ | |
| function isPlainObject(obj) { | |
| // Basic check for Type object that's not null | |
| if (typeof obj == 'object' && obj !== null) { | |
| // If Object.getPrototypeOf supported, use it | |
| if (typeof Object.getPrototypeOf == 'function') { | |
| var proto = Object.getPrototypeOf(obj); | |
| return proto === Object.prototype || proto === null; | |
| } | |
| // Otherwise, use internal class | |
| // This should be reliable as if getPrototypeOf not supported, is pre-ES5 | |
| return Object.prototype.toString.call(obj) == '[object Object]'; | |
| } | |
| // Not an object | |
| return false; | |
| } | |
| // Tests | |
| var data = { | |
| 'Host object': document.createElement('div'), | |
| 'null' : null, | |
| 'new Object' : {}, | |
| 'Object.create(null)' : Object.create(null), | |
| 'Instance of other object' : (function() {function Foo(){};return new Foo()}()), | |
| 'Number primitive ' : 5, | |
| 'String primitive ' : 'P', | |
| 'Number Object' : new Number(6), | |
| 'Built-in Math' : Math | |
| }; | |
| Object.keys(data).forEach(function(item) { | |
| document.write(item + ': ' + isPlainObject(data[item]) + '<br>'); | |
| }); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment