{"ScriptPreparationCode":"var str1 = \u0022awesome\u0022;\r\nvar str2 = \u0022sauce\u0022;\r\n\r\nfunction getType(obj) {\r\n return Object.prototype.toString.call(obj).slice(8, -1).toLowerCase();\r\n}\r\n\r\n function isEqual(left, right) {\r\n function areArraysEqual() {\r\n if (left.length !== right.length) {\r\n return false;\r\n }\r\n\r\n // Check each item in the array\r\n for (let i = 0; i \u003C left.length; i\u002B\u002B) {\r\n if (!isEqual(left[i], right[i])) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n function areObjectsEqual() {\r\n if (Object.keys(left).length !== Object.keys(right).length) {\r\n return false;\r\n }\r\n\r\n // Check each item in the object\r\n for (let key in left) {\r\n if (Object.prototype.hasOwnProperty.call(left, key)) {\r\n if (!isEqual(left[key], right[key])) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n function areFunctionsEqual() {\r\n return left.toString() === right.toString();\r\n }\r\n\r\n function arePrimativesEqual() {\r\n return left === right;\r\n }\r\n\r\n let type = getType(left);\r\n\r\n if (type !== getType(right)) {\r\n return false;\r\n }\r\n\r\n if (type === \u0022array\u0022) {\r\n return areArraysEqual();\r\n }\r\n\r\n if (type === \u0022object\u0022) {\r\n return areObjectsEqual();\r\n }\r\n\r\n if (type === \u0022function\u0022) {\r\n return areFunctionsEqual();\r\n }\r\n\r\n return arePrimativesEqual();\r\n\r\n}","TestCases":[{"Name":"Vanilla ","Code":"str1 === str2","IsDeferred":false},{"Name":"isequal test","Code":"isEqual(str1, str2)","IsDeferred":false},{"Name":"var laa","Code":"str1 == str2","IsDeferred":false}]}