我正在尝试编写node.js脚本,并希望将依赖项保持在最低限度。我想确保名为config
的给定参数是一个普通对象,如下所示:
var config = {
'key1': 'val1',
'key2': 'val2',
'key3': 'val3'
/* ... */
}
现在首先想到的是这样的事情:
if (Object.prototype.toString.call(config) !== '[object Object]') {
/* ... */
}
任何人都可以想到一个这样的例子吗?我认为最好添加:
if (typeof config !== 'object' ||
Object.prototype.toString.call(config) !== '[object Object]') {
/* ... */
}
只是为了确定!但我仍然不相信这可能很容易。我需要
非常感谢你们的时间。
我查看了jQuery源代码,特别是函数jQuery.isPlainObject()
,它使用了一种稍微复杂的方法。在我想要确定它是否是一个普通对象的地方,jQuery确保它不是普通对象以外的任何东西。看看这里:
isPlainObject: function( obj ) {
// Not plain objects:
// - Any object or value whose internal [[Class]] property is not "[object Object]"
// - DOM nodes
// - window
if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
return false;
}
if ( obj.constructor &&
!hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) {
return false;
}
// If the function hasn't returned already, we're confident that
// |obj| is a plain object, created by {} or constructed with new Object
return true;
}