在纯JS中识别普通对象

时间:2014-08-17 16:21:41

标签: javascript node.js types

我正在尝试编写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;
}

0 个答案:

没有答案