Skip to main content
AI Assist is now on Stack Overflow. Start a chat to get instant answers from across the network. Sign up to save and share your chats.
added 543 characters in body
Source Link
last-child
  • 4.9k
  • 1
  • 23
  • 20

It depends on what you mean with "is an object". If you want everything that is not a primitive, i.e. things that you can set new properties on, this should do the trick:

function isAnyObject(value) {
    return value != null && (typeof value === 'object' || typeof value === 'function');
}

It excludes the primitives (plain numbers/NaN/Infinity, plain strings, symbols, true/false, undefined and null) but should return true for everything else (including Number, Boolean and String objects). Note that JS does not define what "host" objects, such as window or console, should return when used with typeof, so those are hard to cover with a check like this.

If you want to know whether something is a "plain" object, i.e. it was created as a literal {} or with Object.create(null), you might do this:

function isPlainObject(value) {
    if (Object.prototype.toString.call(value) !== '[object Object]') {
        return false;
    } else {
        var prototype = Object.getPrototypeOf(value);
        return prototype === null || prototype === Object.prototype;
    }
}

Edit 2018: Because Symbol.toStringTag now allows customizing the output of Object.prototype.toString.call(...), the isPlainObject function above might return false in some cases even when the object started its life as a literal. Arguably, by convention an object with a custom string tag isn't exactly a plain object any more, but this has further muddied the definition of what a plain object even is in Javascript.

It depends on what you mean with "is an object". If you want everything that is not a primitive, i.e. things that you can set new properties on, this should do the trick:

function isAnyObject(value) {
    return value != null && (typeof value === 'object' || typeof value === 'function');
}

It excludes the primitives (plain numbers/NaN/Infinity, plain strings, true/false, undefined and null) but should return true for everything else (including Number, Boolean and String objects). Note that JS does not define what "host" objects, such as window or console, should return when used with typeof, so those are hard to cover with a check like this.

If you want to know whether something is a "plain" object, i.e. it was created as a literal {} or with Object.create(null), you might do this:

function isPlainObject(value) {
    if (Object.prototype.toString.call(value) !== '[object Object]') {
        return false;
    } else {
        var prototype = Object.getPrototypeOf(value);
        return prototype === null || prototype === Object.prototype;
    }
}

It depends on what you mean with "is an object". If you want everything that is not a primitive, i.e. things that you can set new properties on, this should do the trick:

function isAnyObject(value) {
    return value != null && (typeof value === 'object' || typeof value === 'function');
}

It excludes the primitives (plain numbers/NaN/Infinity, plain strings, symbols, true/false, undefined and null) but should return true for everything else (including Number, Boolean and String objects). Note that JS does not define what "host" objects, such as window or console, should return when used with typeof, so those are hard to cover with a check like this.

If you want to know whether something is a "plain" object, i.e. it was created as a literal {} or with Object.create(null), you might do this:

function isPlainObject(value) {
    if (Object.prototype.toString.call(value) !== '[object Object]') {
        return false;
    } else {
        var prototype = Object.getPrototypeOf(value);
        return prototype === null || prototype === Object.prototype;
    }
}

Edit 2018: Because Symbol.toStringTag now allows customizing the output of Object.prototype.toString.call(...), the isPlainObject function above might return false in some cases even when the object started its life as a literal. Arguably, by convention an object with a custom string tag isn't exactly a plain object any more, but this has further muddied the definition of what a plain object even is in Javascript.

edited body
Source Link
last-child
  • 4.9k
  • 1
  • 23
  • 20

It depends on what you mean with "is an object". If you want everything that is not a primitive, i.e. things that you can set new properties on, this should do the trick:

function isAnyObject(value) {
    return value != null && (typeof value === 'object' || typeof value === 'function');
}

It excludes the primitives (plain numbers/NaN/Infinity, plain strings, true/false, undefined and null) but should return true for everything else (including Number, Boolean and String objects). Note that JS does not define what "host" objects, such as window or console, should return when used with typeof, so those are hard to cover with a check like this.

If you want to know whether something is a "plain" object, ei.ge. it was created as a literal {} or with Object.create(null), you might do this:

function isPlainObject(value) {
    if (Object.prototype.toString.call(value) !== '[object Object]') {
        return false;
    } else {
        var prototype = Object.getPrototypeOf(value);
        return prototype === null || prototype === Object.prototype;
    }
}

It depends on what you mean with "is an object". If you want everything that is not a primitive, i.e. things that you can set new properties on, this should do the trick:

function isAnyObject(value) {
    return value != null && (typeof value === 'object' || typeof value === 'function');
}

It excludes the primitives (plain numbers/NaN/Infinity, plain strings, true/false, undefined and null) but should return true for everything else (including Number, Boolean and String objects). Note that JS does not define what "host" objects, such as window or console, should return when used with typeof, so those are hard to cover with a check like this.

If you want to know whether something is a "plain" object, e.g. it was created as a literal {} or with Object.create(null), you might do this:

function isPlainObject(value) {
    if (Object.prototype.toString.call(value) !== '[object Object]') {
        return false;
    } else {
        var prototype = Object.getPrototypeOf(value);
        return prototype === null || prototype === Object.prototype;
    }
}

It depends on what you mean with "is an object". If you want everything that is not a primitive, i.e. things that you can set new properties on, this should do the trick:

function isAnyObject(value) {
    return value != null && (typeof value === 'object' || typeof value === 'function');
}

It excludes the primitives (plain numbers/NaN/Infinity, plain strings, true/false, undefined and null) but should return true for everything else (including Number, Boolean and String objects). Note that JS does not define what "host" objects, such as window or console, should return when used with typeof, so those are hard to cover with a check like this.

If you want to know whether something is a "plain" object, i.e. it was created as a literal {} or with Object.create(null), you might do this:

function isPlainObject(value) {
    if (Object.prototype.toString.call(value) !== '[object Object]') {
        return false;
    } else {
        var prototype = Object.getPrototypeOf(value);
        return prototype === null || prototype === Object.prototype;
    }
}
e.g. -> i.e.
Source Link
last-child
  • 4.9k
  • 1
  • 23
  • 20

It depends on what you mean with "is an object". If you want everything that is not a primitive, ei.ge. things that you can set new properties on, this should do the trick:

function isAnyObject(value) {
    return value != null && (typeof value === 'object' || typeof value === 'function');
}

It excludes the primitives (plain numbers/NaN/Infinity, plain strings, true/false, undefined and null) but should return true for everything else (including Number, Boolean and String objects). Note that JS does not define what "host" objects, such as window or console, should return when used with typeof, so those are hard to cover with a check like this.

If you want to know whether something is a "plain" object, e.g. it was created as a literal {} or with Object.create(null), you might do this:

function isPlainObject(value) {
    if (Object.prototype.toString.call(value) !== '[object Object]') {
        return false;
    } else {
        var prototype = Object.getPrototypeOf(value);
        return prototype === null || prototype === Object.prototype;
    }
}

It depends on what you mean with "is an object". If you want everything that is not a primitive, e.g. things that you can set new properties on, this should do the trick:

function isAnyObject(value) {
    return value != null && (typeof value === 'object' || typeof value === 'function');
}

It excludes the primitives (plain numbers/NaN/Infinity, plain strings, true/false, undefined and null) but should return true for everything else (including Number, Boolean and String objects). Note that JS does not define what "host" objects, such as window or console, should return when used with typeof, so those are hard to cover with a check like this.

If you want to know whether something is a "plain" object, e.g. it was created as a literal {} or with Object.create(null), you might do this:

function isPlainObject(value) {
    if (Object.prototype.toString.call(value) !== '[object Object]') {
        return false;
    } else {
        var prototype = Object.getPrototypeOf(value);
        return prototype === null || prototype === Object.prototype;
    }
}

It depends on what you mean with "is an object". If you want everything that is not a primitive, i.e. things that you can set new properties on, this should do the trick:

function isAnyObject(value) {
    return value != null && (typeof value === 'object' || typeof value === 'function');
}

It excludes the primitives (plain numbers/NaN/Infinity, plain strings, true/false, undefined and null) but should return true for everything else (including Number, Boolean and String objects). Note that JS does not define what "host" objects, such as window or console, should return when used with typeof, so those are hard to cover with a check like this.

If you want to know whether something is a "plain" object, e.g. it was created as a literal {} or with Object.create(null), you might do this:

function isPlainObject(value) {
    if (Object.prototype.toString.call(value) !== '[object Object]') {
        return false;
    } else {
        var prototype = Object.getPrototypeOf(value);
        return prototype === null || prototype === Object.prototype;
    }
}
added 10 characters in body; added 4 characters in body
Source Link
last-child
  • 4.9k
  • 1
  • 23
  • 20
Loading
Source Link
last-child
  • 4.9k
  • 1
  • 23
  • 20
Loading