From 3746bf8feb30bd875f736d57de6bd94abcbd53f5 Mon Sep 17 00:00:00 2001 From: Rick Waldron Date: Mon, 24 Dec 2012 10:54:11 -0500 Subject: [PATCH] Explanations for each step of isPlainObject Signed-off-by: Rick Waldron --- src/core.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/core.js b/src/core.js index a89df3d4f..41e68268e 100644 --- a/src/core.js +++ b/src/core.js @@ -412,12 +412,17 @@ jQuery.extend({ }, isPlainObject: function( obj ) { - // Not plain objects: params that are not [[Class]] "[object Object]", DOM nodes, window + // 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; } // Support: Firefox >16 + // The try/catch supresses exceptions thrown when attempting to access + // the "constructor" property of certain host objects, ie. |window.location| try { if ( obj.constructor && !core_hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) { @@ -427,6 +432,8 @@ jQuery.extend({ 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; }, -- 2.39.5