types的对象,但不是数组

我正在寻找一个快速检查来确定这一点

function isPlainObject(input){ return !Array.isArray(input) && typeof input === 'object' } 

有没有一个更短的检查,我可以用来确定input是这样的

 {} 

但不是一个数组

 [] 

或其他可能的结构,仍然签出types的“对象”?

       

网上收集的解决方案 "types的对象,但不是数组"

这不是更快,但更精确的是,检查伪造值,如null ,这是一个对象。

 function isPlainObject(input){ return input && !Array.isArray(input) && typeof input === 'object'; } 

如果你想检查一个对象是否是一个“普通”的对象,即直接从Object.prototypeinheritance,那么你应该检查它。

例如下面的第一个testing,如果value的原型链上有任何地方的Object (因此不会为getPrototypeOf抛出错误),然后检查它的immediate [[prototype]]是否为Object.prototype

 function isPlainObject(value) { return value instanceof Object && Object.getPrototypeOf(value) == Object.prototype; } // Some tests [[1,2], // Array {}, // Plain object null, // null document.createElement('div'), // host object function(){}, // function object console // host objet ].forEach(function(value) { console.log(value + ': ' + isPlainObject(value)); }); 

Javascript数组被认为是对象,所以在数组的情况下,typeof将始终是对象。