Performance
Today 2020.09.26 I perform tests on MacOs HighSierra 10.13.6 on Chrome v85, Safari v13.1.2 and Firefox v80 for chosen solutions.
Results
- solutions C and H are fast/fastest on all browsers for all cases
- solutions D and G are slow/slowest on all browsers for all cases

Details
I perform 3 tests cases for solutions
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
- for small object - you can run it HERE
- for big object - you can run it HERE
- for no object - you can run it HERE
Below snippet presents differences between solutions
// https://stackoverflow.com/a/14706877/860099
function A(x) {
return x === Object(x);
};
// https://stackoverflow.com/a/42250981/860099
function B(x) {
return _.isObject(x);
}
// https://stackoverflow.com/a/34864175/860099
function C(x) {
return x != null && (typeof x === 'object' || typeof x === 'function');
}
// https://stackoverflow.com/a/39187058/860099
function D(x) {
return new function() { return x; }() === x;
}
// https://stackoverflow.com/a/39187058/860099
function E(x) {
return function() { return this === x; }.call(x);
}
// https://stackoverflow.com/a/39187058/860099
function F(x) { /* Requires ECMAScript 5 or later */
try {
Object.create(x);
return x !== null;
} catch(err) {
return false;
}
}
// https://stackoverflow.com/a/39187058/860099
function G(x) { /* Requires ECMAScript 5 or later */
function Constructor() {}
Constructor.prototype = x;
return Object.getPrototypeOf(new Constructor()) === x;
}
// https://stackoverflow.com/a/8511332/860099
function H(x) {
return typeof x === 'object' && x !== null
}
// https://stackoverflow.com/a/25715455/860099
function I(x) {
return (typeof x === "object" && !Array.isArray(x) && x !== null);
};
// https://stackoverflow.com/a/22482737/860099
function J(x) {
return x instanceof Object;
}
// https://stackoverflow.com/a/50712057/860099
function K(x)
{
let t= JSON.stringify(x);
return t ? t[0] === '{' : false;
}
// https://stackoverflow.com/a/13356338/860099
function L(x) {
return Object.prototype.toString.call(x) === "[object Object]";
};
// https://stackoverflow.com/a/46663081/860099
function M(o, strict = true) {
if (o === null || o === undefined) {
return false;
}
const instanceOfObject = o instanceof Object;
const typeOfObject = typeof o === 'object';
const constructorUndefined = o.constructor === undefined;
const constructorObject = o.constructor === Object;
const typeOfConstructorObject = typeof o.constructor === 'function';
let r;
if (strict === true) {
r = (instanceOfObject || typeOfObject) && (constructorUndefined || constructorObject);
} else {
r = (constructorUndefined || typeOfConstructorObject);
}
return r;
}
// https://stackoverflow.com/a/42250981/860099
function N(x) {
return $.type(x) === 'object';
}
// https://stackoverflow.com/a/34864175/860099
function O(x) {
if (Object.prototype.toString.call(x) !== '[object Object]') {
return false;
} else {
var prototype = Object.getPrototypeOf(x);
return prototype === null || prototype === Object.prototype;
}
}
// https://stackoverflow.com/a/57863169/860099
function P(x) {
while ( Object.prototype.toString.call(x) === '[object Object]')
if ((x = Object.getPrototypeOf(x)) === null)
return true
return false
}
// https://stackoverflow.com/a/43289971/860099
function Q(x){
try{
switch(x.constructor){
case Number:
case Function:
case Boolean:
case Symbol:
case Date:
case String:
case RegExp:
return x.constructor === Object;
case Error:
case EvalError:
case RangeError:
case ReferenceError:
case SyntaxError:
case TypeError:
case URIError:
return (Object === Error ? Error : x.constructor) === Object;
case Array:
case Int8Array:
case Uint8Array:
case Uint8ClampedArray:
case Int16Array:
case Uint16Array:
case Int32Array:
case Uint32Array:
case Float32Array:
case Float64Array:
return (Object === Array ? Array : x.constructor) === Object;
case Object:
default:
return (Object === Object ? Object : x.constructor) === Object;
}
} catch(ex){
return x == Object;
}
}
// https://stackoverflow.com/a/52478680/860099
function R(x) {
return typeof x == 'object' && x instanceof Object && !(x instanceof Array);
}
// https://stackoverflow.com/a/51458052/860099
function S(x)
{
return x != null && x.constructor?.name === "Object"
}
// https://stackoverflow.com/a/42250981/860099
function T(x) {
return x?.constructor?.toString().indexOf("Object") > -1;
}
// https://stackoverflow.com/a/43223661/860099
function U(x)
{
return x?.constructor === Object;
}
// https://stackoverflow.com/a/46663081/860099
function V(x) {
return x instanceof Object && x.constructor === Object;
}
// -------------
// TEST
// -------------
console.log('column: 1 2 3 4 5 6 - 7 8 9 10 11');
[A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V]
.map(f=> console.log(`${f.name}: ${1*f(new Date())} ${1*f(/./)} ${1*f({})} ${1*f(Object.prototype)} ${1*f(Object.create(null))} ${1*f(()=>{})} - ${1*f("abc")} ${1*f(3)} ${1*f(true)} ${1*f(null)} ${1*f(undefined)}`))
console.log(`
Columns legend (test cases):
1: new Date()
2: /./ (RegExp)
3: {}
4: Object.prototype
5: Object.create(null)
6: ()=>{} (function)
7: "abc" (string)
8: 3 (number)
9: true (boolean)
10: null
11: undefined
Rows:
1 = is object
0 = is NOT object
Theoretically columns 1-6 should have have 1, columns 7-11 shoud have 0
`);
<script
src="https://code.jquery.com/jquery-3.5.1.min.js"
integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0="
crossorigin="anonymous"></script>
<script
src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js"
integrity="sha512-90vH1Z83AJY9DmlWa8WkjkV79yfS2n2Oxhsi2dZbIv0nC4E6m5AbH8Nh156kkM7JePmqD6tcZsfad1ueoaovww=="
crossorigin="anonymous"></script>
This shippet only presents functions used in performance tests - it not perform tests itself!
And here are example results for chrome
