{"@attributes":{"version":"2.0"},"channel":{"title":"DEV Community: Baba","description":"The latest articles on DEV Community by Baba (@iskndrvbksh).","link":"https:\/\/dev.to\/iskndrvbksh","image":{"url":"https:\/\/media2.dev.to\/dynamic\/image\/width=90,height=90,fit=cover,gravity=auto,format=auto\/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F58528%2Fb5b846da-3a75-47e1-96fa-17d90d54f3b6.png","title":"DEV Community: Baba","link":"https:\/\/dev.to\/iskndrvbksh"},"language":"en","item":{"title":"What is the purpose of this code?","pubDate":"Mon, 27 Sep 2021 07:54:43 +0000","link":"https:\/\/dev.to\/iskndrvbksh\/what-is-the-purpose-of-this-code-97o","guid":"https:\/\/dev.to\/iskndrvbksh\/what-is-the-purpose-of-this-code-97o","description":"<p>Today I was playing with the <code>Object.defineProperty<\/code> method and doing weird stuffs like making the 3rd index of an <code>Array<\/code> to \ud83d\udd25always\ud83d\udd25 return 'Frank Stallone' (don't ask why)<\/p>\n\n<p><code>console.log([1,2,3,4][3]); \/\/ Frank Stallone<\/code><\/p>\n\n<p>anyways<\/p>\n\n<p>I added debugger statement to set method of a descriptor:<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>Object.defineProperty(Array.prototype, 3, {\n  set() { debugger; }\n});\n<\/code><\/pre>\n\n<\/div>\n\n\n\n<p>after typing something to the console triggers debugger with 2 calls in the call stack:<br>\n<a href=\"https:\/\/res.cloudinary.com\/practicaldev\/image\/fetch\/s--KxF4O3eU--\/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880\/https:\/\/dev-to-uploads.s3.amazonaws.com\/uploads\/articles\/ezmflfcwyh16ev5g4m2d.png\" class=\"article-body-image-wrapper\"><img src=\"https:\/\/res.cloudinary.com\/practicaldev\/image\/fetch\/s--KxF4O3eU--\/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880\/https:\/\/dev-to-uploads.s3.amazonaws.com\/uploads\/articles\/ezmflfcwyh16ev5g4m2d.png\" alt=\"image\"><\/a><\/p>\n\n<p>Code snippet in the first call:<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code><span class=\"p\">(<\/span><span class=\"kd\">function<\/span> <span class=\"nx\">i<\/span><span class=\"p\">(<\/span><span class=\"nx\">t<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"kd\">let<\/span> <span class=\"nx\">e<\/span><span class=\"p\">;<\/span>\n    <span class=\"nx\">e<\/span> <span class=\"o\">=<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">string<\/span><span class=\"dl\">\"<\/span> <span class=\"o\">===<\/span> <span class=\"nx\">t<\/span> <span class=\"p\">?<\/span> <span class=\"k\">new<\/span> <span class=\"nb\">String<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"\"<\/span><span class=\"p\">)<\/span> <span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">number<\/span><span class=\"dl\">\"<\/span> <span class=\"o\">===<\/span> <span class=\"nx\">t<\/span> <span class=\"p\">?<\/span> <span class=\"k\">new<\/span> <span class=\"nb\">Number<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">)<\/span> <span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">bigint<\/span><span class=\"dl\">\"<\/span> <span class=\"o\">===<\/span> <span class=\"nx\">t<\/span> <span class=\"p\">?<\/span> <span class=\"nb\">Object<\/span><span class=\"p\">(<\/span><span class=\"nx\">BigInt<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">))<\/span> <span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">boolean<\/span><span class=\"dl\">\"<\/span> <span class=\"o\">===<\/span> <span class=\"nx\">t<\/span> <span class=\"p\">?<\/span> <span class=\"k\">new<\/span> <span class=\"nb\">Boolean<\/span><span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"mi\">1<\/span><span class=\"p\">)<\/span> <span class=\"p\">:<\/span> <span class=\"k\">this<\/span><span class=\"p\">;<\/span>\n    <span class=\"kd\">const<\/span> <span class=\"nx\">s<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[];<\/span>\n    <span class=\"k\">try<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">for<\/span> <span class=\"p\">(<\/span><span class=\"kd\">let<\/span> <span class=\"nx\">i<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">e<\/span><span class=\"p\">;<\/span> <span class=\"nx\">i<\/span><span class=\"p\">;<\/span> <span class=\"nx\">i<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">Object<\/span><span class=\"p\">.<\/span><span class=\"nx\">getPrototypeOf<\/span><span class=\"p\">(<\/span><span class=\"nx\">i<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\n            <span class=\"k\">if<\/span> <span class=\"p\">((<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">array<\/span><span class=\"dl\">\"<\/span> <span class=\"o\">===<\/span> <span class=\"nx\">t<\/span> <span class=\"o\">||<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">typedarray<\/span><span class=\"dl\">\"<\/span> <span class=\"o\">===<\/span> <span class=\"nx\">t<\/span><span class=\"p\">)<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"nx\">i<\/span> <span class=\"o\">===<\/span> <span class=\"nx\">e<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"nx\">i<\/span><span class=\"p\">.<\/span><span class=\"nx\">length<\/span> <span class=\"o\">&gt;<\/span> <span class=\"mi\">9999<\/span><span class=\"p\">)<\/span>\n                <span class=\"k\">continue<\/span><span class=\"p\">;<\/span>\n            <span class=\"kd\">const<\/span> <span class=\"nx\">n<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\n                <span class=\"na\">items<\/span><span class=\"p\">:<\/span> <span class=\"p\">[],<\/span>\n                <span class=\"na\">title<\/span><span class=\"p\">:<\/span> <span class=\"k\">void<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span>\n                <span class=\"na\">__proto__<\/span><span class=\"p\">:<\/span> <span class=\"kc\">null<\/span>\n            <span class=\"p\">};<\/span>\n            <span class=\"k\">try<\/span> <span class=\"p\">{<\/span>\n                <span class=\"dl\">\"<\/span><span class=\"s2\">object<\/span><span class=\"dl\">\"<\/span> <span class=\"o\">==<\/span> <span class=\"k\">typeof<\/span> <span class=\"nx\">i<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"nb\">Object<\/span><span class=\"p\">.<\/span><span class=\"nx\">prototype<\/span><span class=\"p\">.<\/span><span class=\"nx\">hasOwnProperty<\/span><span class=\"p\">.<\/span><span class=\"nx\">call<\/span><span class=\"p\">(<\/span><span class=\"nx\">i<\/span><span class=\"p\">,<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">constructor<\/span><span class=\"dl\">\"<\/span><span class=\"p\">)<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"nx\">i<\/span><span class=\"p\">.<\/span><span class=\"kd\">constructor<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"nx\">i<\/span><span class=\"p\">.<\/span><span class=\"kd\">constructor<\/span><span class=\"p\">.<\/span><span class=\"nx\">name<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"p\">(<\/span><span class=\"nx\">n<\/span><span class=\"p\">.<\/span><span class=\"nx\">title<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">i<\/span><span class=\"p\">.<\/span><span class=\"kd\">constructor<\/span><span class=\"p\">.<\/span><span class=\"nx\">name<\/span><span class=\"p\">)<\/span>\n            <span class=\"p\">}<\/span> <span class=\"k\">catch<\/span> <span class=\"p\">(<\/span><span class=\"nx\">t<\/span><span class=\"p\">)<\/span> <span class=\"p\">{}<\/span>\n            <span class=\"nx\">s<\/span><span class=\"p\">[<\/span><span class=\"nx\">s<\/span><span class=\"p\">.<\/span><span class=\"nx\">length<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">n<\/span><span class=\"p\">;<\/span>\n            <span class=\"kd\">const<\/span> <span class=\"nx\">o<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">Object<\/span><span class=\"p\">.<\/span><span class=\"nx\">getOwnPropertyNames<\/span><span class=\"p\">(<\/span><span class=\"nx\">i<\/span><span class=\"p\">)<\/span>\n              <span class=\"p\">,<\/span> <span class=\"nx\">r<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">Array<\/span><span class=\"p\">.<\/span><span class=\"nx\">isArray<\/span><span class=\"p\">(<\/span><span class=\"nx\">i<\/span><span class=\"p\">);<\/span>\n            <span class=\"k\">for<\/span> <span class=\"p\">(<\/span><span class=\"kd\">let<\/span> <span class=\"nx\">t<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span> <span class=\"nx\">t<\/span> <span class=\"o\">&lt;<\/span> <span class=\"nx\">o<\/span><span class=\"p\">.<\/span><span class=\"nx\">length<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"nx\">n<\/span><span class=\"p\">.<\/span><span class=\"nx\">items<\/span><span class=\"p\">.<\/span><span class=\"nx\">length<\/span> <span class=\"o\">&lt;<\/span> <span class=\"mi\">1<\/span><span class=\"nx\">e4<\/span><span class=\"p\">;<\/span> <span class=\"o\">++<\/span><span class=\"nx\">t<\/span><span class=\"p\">)<\/span>\n                <span class=\"nx\">r<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"sr\">\/^<\/span><span class=\"se\">[<\/span><span class=\"sr\">0-9<\/span><span class=\"se\">]<\/span><span class=\"sr\">\/<\/span><span class=\"p\">.<\/span><span class=\"nx\">test<\/span><span class=\"p\">(<\/span><span class=\"nx\">o<\/span><span class=\"p\">[<\/span><span class=\"nx\">t<\/span><span class=\"p\">])<\/span> <span class=\"o\">||<\/span> <span class=\"p\">(<\/span><span class=\"nx\">n<\/span><span class=\"p\">.<\/span><span class=\"nx\">items<\/span><span class=\"p\">[<\/span><span class=\"nx\">n<\/span><span class=\"p\">.<\/span><span class=\"nx\">items<\/span><span class=\"p\">.<\/span><span class=\"nx\">length<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">o<\/span><span class=\"p\">[<\/span><span class=\"nx\">t<\/span><span class=\"p\">])<\/span>\n        <span class=\"p\">}<\/span>\n    <span class=\"p\">}<\/span> <span class=\"k\">catch<\/span> <span class=\"p\">(<\/span><span class=\"nx\">t<\/span><span class=\"p\">)<\/span> <span class=\"p\">{}<\/span>\n    <span class=\"k\">return<\/span> <span class=\"nx\">s<\/span>\n<span class=\"p\">}<\/span>\n<span class=\"p\">)<\/span>\n<\/code><\/pre>\n\n<\/div>\n\n\n\n<h2>\n  \n  \n  Can someone explain to me what is the purpose of this code? and what it does?\n<\/h2>\n\n","category":["javascript","discuss"]}}}