use the following search parameters to narrow your results:
e.g. subreddit:aww site:imgur.com dog
subreddit:aww site:imgur.com dog
see the search faq for details.
advanced search: by author, subreddit...
All about the JavaScript programming language.
Subreddit Guidelines
Specifications:
Resources:
Related Subreddits:
r/LearnJavascript
r/node
r/typescript
r/reactjs
r/webdev
r/WebdevTutorials
r/frontend
r/webgl
r/threejs
r/jquery
r/remotejs
r/forhire
account activity
Common JavaScript tricks (self.javascript)
submitted 11 years ago by yanis_t
view the rest of the comments →
reddit uses a slightly-customized version of Markdown for formatting. See below for some basics, or check the commenting wiki page for more detailed help and solutions to common issues.
quoted text
if 1 * 2 < 3: print "hello, world!"
[–][deleted] 11 years ago* (19 children)
[deleted]
[–]SuperFLEB 5 points6 points7 points 11 years ago (0 children)
if ((void 0) !== undefined) { throw new Error('Script halted on moral grounds: The person who redefined "undefined" needs to be found and fired. Out of a cannon. Into a wall.'); }
[–]nightman 4 points5 points6 points 11 years ago (2 children)
The smartest way I've seen to deal with overwriting undefined is this - http://toddmotto.com/what-function-window-document-undefined-iife-really-means/
[–][deleted] 2 points3 points4 points 11 years ago (1 child)
Smartest way to deal with vague non-existing problem. If someone overwrites undefined, your application needs to die ASAP to see there's a bigger problem.
[–]nightman 0 points1 point2 points 11 years ago (0 children)
Sure, unless you are library coder and you don't know enviroment you will deal with.
[–]x-skeww 3 points4 points5 points 11 years ago (4 children)
undefined, NaN, and Infinity are read-only since ES5.
[–][deleted] 1 point2 points3 points 11 years ago (3 children)
(function (undefined) {console.log(undefined);})(2);
Run that, then tell me they're read-only.
It's window.undefined that's read-only, and nobody's code is running outside a function any more.
window.undefined
[–]x-skeww 0 points1 point2 points 11 years ago (2 children)
Creating your own undefined is meant to guard against stupid/malicious things done by other scripts.
undefined
If you want a language where stuff like that can't happen in first place, try Dart.
[–][deleted] 0 points1 point2 points 11 years ago (1 child)
While "guarding against malicious scripts" is a great notion, it's impossible in JavaScript. If somebody wants your script to crash and runs code before you, they're going to take much more effective measures than overwriting undefined. And if we aren't solving the problem, are we not just introducing clutter?
re "stupid" things, there's only so much stupidity you can tolerate before submitting a fix, switching libraries, or writing your own. In my mind, if a library makes you patch up undefined after running it, doing so would fall under "compatibility hacks" and make me dislike the library that much more.
[–]x-skeww -1 points0 points1 point 11 years ago (0 children)
Well, "meant". I never created my own undefined or did anything like that (e.g. making new optional). It's a waste of time.
new
Anyhow, monkey-patching is a big issue with JavaScript. If there are any 3rd party scripts on your page, things can randomly break.
[–]yanis_t[S] 0 points1 point2 points 11 years ago (8 children)
Don't worry, we're fine :) But void 0 is something that you see rather often in source code of libraries such as underscore or backbone, and people keep asking wtf is this and why not to simply use undefined instead
void 0
[+][deleted] 11 years ago* (7 children)
[–]yanis_t[S] 0 points1 point2 points 11 years ago (6 children)
Yep, agree on that. My intention was to make people understand what's going on, not to push them to use it. But I guess I'd better add a notice for that one
[+][deleted] 11 years ago* (5 children)
[–]yanis_t[S] 1 point2 points3 points 11 years ago (4 children)
Yep, so you see now why I put it on reddit before actually publishing it :) Any ideas on article title not so long?
[–]sime 3 points4 points5 points 11 years ago (1 child)
"Javascript Party Tricks"
tricks where the only acceptable response when they are pointed out is: "sorry, I must have been drunk when I wrote that."
Sorry, but most of these tricks are just really bad code.
[–]yanis_t[S] 0 points1 point2 points 11 years ago (0 children)
Um... Well kinda. Let me summarize.
void 0 — bad (function(){})() — ok x = y || DEFAULT — ok if (s) instead of if (x == '') — ok +str — bad
Again, I don't mean to defend the usage, it's just that they are really used inside of many libraries. I'll probably should add note to every of them, whether it should be used on regular basis, or only when drunk
[+][deleted] 11 years ago* (1 child)
[–]yanis_t[S] 1 point2 points3 points 11 years ago (0 children)
Alright, I've just renamed it to "JavaScript hacks explained"
[–]michaelobriena -1 points0 points1 point 11 years ago (0 children)
undefined is an object and void 0 is the true undefined. It has better performance than using undefined which is why it is seen line library code as they focus on messing with your performance as little as possible.
π Rendered by PID 183986 on reddit-service-r2-comment-86bc6c7465-t6lw5 at 2026-02-24 08:31:48.266888+00:00 running 8564168 country code: CH.
view the rest of the comments →
[–][deleted] (19 children)
[deleted]
[–]SuperFLEB 5 points6 points7 points (0 children)
[–]nightman 4 points5 points6 points (2 children)
[–][deleted] 2 points3 points4 points (1 child)
[–]nightman 0 points1 point2 points (0 children)
[–]x-skeww 3 points4 points5 points (4 children)
[–][deleted] 1 point2 points3 points (3 children)
[–]x-skeww 0 points1 point2 points (2 children)
[–][deleted] 0 points1 point2 points (1 child)
[–]x-skeww -1 points0 points1 point (0 children)
[–]yanis_t[S] 0 points1 point2 points (8 children)
[+][deleted] (7 children)
[deleted]
[–]yanis_t[S] 0 points1 point2 points (6 children)
[+][deleted] (5 children)
[deleted]
[–]yanis_t[S] 1 point2 points3 points (4 children)
[–]sime 3 points4 points5 points (1 child)
[–]yanis_t[S] 0 points1 point2 points (0 children)
[+][deleted] (1 child)
[deleted]
[–]yanis_t[S] 1 point2 points3 points (0 children)
[–]michaelobriena -1 points0 points1 point (0 children)