Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<!-- Online here: http://ejohn.org/files/bugs/isObjectLiteral/ -->
<title>isObjectLiteral</title>
<style>
li { background: green; } li.FAIL { background: red; }
iframe { display: none; }
</style>
</head>
<body>
<ul id="results"></ul>
<script>
function isObjectLiteral(obj){
// Implement me!
return false;
// Other Solutions:
// Uses function serialization which doesn't work in all browsers
//return /^function Object/.test( obj.constructor );
// Doesn't work with object from other windows
//return Object.prototype.toString.call(obj) === "[object Object]";
}
// Function serialization is not permitted
// Does not work across all browsers
Function.prototype.toString = function(){};
log("{}", {}, true);
log("new Date", new Date, false);
var fn = function(){};
log("fn", fn, false);
log("new fn", new fn, false);
var iframe = document.createElement("iframe");
document.body.appendChild(iframe);
var doc = iframe.contentDocument || iframe.contentWindow.document;
doc.open();
doc.write("<body onload='window.top.iframeDone(Object);'>");
doc.close();
function iframeDone(otherObject){
log("new otherObject", new otherObject, true);
}
function log(msg, a, b) {
var pass = isObjectLiteral(a) === b ? "PASS" : "FAIL";
document.getElementById("results").innerHTML +=
"<li class='" + pass + "'>" + msg + "</li>";
}
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment