diff --git a/src/prototype/lang/object.js b/src/prototype/lang/object.js index 675530a74..aad230945 100644 --- a/src/prototype/lang/object.js +++ b/src/prototype/lang/object.js @@ -29,6 +29,7 @@ NUMBER_TYPE = 'Number', STRING_TYPE = 'String', OBJECT_TYPE = 'Object', + OBJECT_CLASS = '[object Object]'; FUNCTION_CLASS = '[object Function]', BOOLEAN_CLASS = '[object Boolean]', NUMBER_CLASS = '[object Number]', @@ -486,6 +487,24 @@ return object instanceof Hash; } + /** + * Object.isObject(object) -> Boolean + * - object (Object): The object to test. + * + * Returns `true` if `object` is of type [[Object]]; `false` otherwise. + * + * ##### Examples + * + * Object.isObject({}); + * //-> true + * + * Object.isObject('str'); + * //-> false + **/ + function isObject(object) { + return _toString.call(object) === OBJECT_CLASS; + } + /** * Object.isFunction(object) -> Boolean * - object (Object): The object to test. @@ -603,6 +622,7 @@ keys: Object.keys || keys, values: values, clone: clone, + isObject: isObject, isElement: isElement, isArray: isArray, isHash: isHash, diff --git a/test/unit/tests/object.test.js b/test/unit/tests/object.test.js index a32c53b9d..555e428dd 100644 --- a/test/unit/tests/object.test.js +++ b/test/unit/tests/object.test.js @@ -143,6 +143,19 @@ suite('Object', function () { assert.strictEqual(false, Object.isElement(undefined)); }); + test('.isObject', function () { + assert(Object.isObject({})); + assert(Object.isObject(new Object())); + + assert(!Object.isObject("a string")); + assert(!Object.isObject($(document.createElement('div')))); + assert(!Object.isObject([])); + assert(!Object.isObject(0)); + assert(!Object.isObject(false)); + assert(!Object.isObject(undefined)); + assert(!Object.isObject(/xyz/)); + }); + test('.isFunction', function () { assert(Object.isFunction(function() { })); assert(Object.isFunction(Class.create()));