 					"        }",
 					"        return value[JSON_FUNCTION_PREFIX];",
 					"    }",
-					"    if (value === undefined || (typeof value === 'number' && !isFinite(value)))",
+					"    if (typeof value === 'number' && !isFinite(value))",
 					"        return value + JSON_SUFFIX;",
-					"    return Array.isArray(value) && !(value instanceof Array) ? [].concat(value) : value;",
+					"    if (Array.isArray(value) && !(value instanceof Array))",
+					"        return Array.prototype.slice.call(value);",
+					"    return value;",
 					"};",
 					
 					"flash[JSON_REVIVER] = function(key, value) {",

	 * ExternalInterface generates the following invalid code: <code>{Content-Type: "foo\"}</code>.
	 * The same problem occurs when returning an Object from an ActionScript function that was invoked
	 * from JavaScript. This class works around the limitation by using JSON.stringify() and JSON.parse()
	 * and escaping backslashes in resulting JSON strings. The values <code>undefined, NaN, Infinity, -Infinity</code>
	 * are preserved.
	 * 
	 * This class also provides an objectID accessor which is more reliable than ExternalInterface.objectID,

			initialized = true;
			
			// save special IDs for values not supported by JSON
			for each (var symbol:Object in [NaN, Infinity, -Infinity])
				_jsonLookup[symbol + JSON_SUFFIX] = symbol;
			
			// determine if backslashes need to be escaped
