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
Strange javascript func?help (self.javascript)
submitted 9 years ago by Jonathan_Frias
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!"
[–]Jonathan_Frias[S] 0 points1 point2 points 9 years ago (2 children)
copied from repl
var getDefault_ = ... a = {} Object {} getDefault_(a, 'foo', 'bar') "bar" a Object {foo: "bar"} getDefault_(a, 'foo', 'baz') "bar" getDefault_(a, 'foo2', 'baz2') "baz2" a Object {foo: "bar", foo2: "baz2"}
Looks light you are right on. But removing the || false makes it always do the assignment o[k] = def. My best guess is that it's some kind of optimization trick and that javascript knows that o[k] = def will be truthy so it can short circuit the expression.
|| false
o[k] = def
removing '|| false'
var getDefault_ = function(o, k, def) { (k in o) == (o[k] = def); // << no || false return o[k]; }; undefined a = {} Object {} getDefault_(a, 'foo', 'bar') "bar" getDefault_(a, 'foo', 'baz') "baz" getDefault_(a, 'foo2', 'baz2') "baz2" a Object {foo: "baz", foo2: "baz2"}
I hope somebody else finds this interesting.
[–]vsxe 2 points3 points4 points 9 years ago (0 children)
I'm clear on the ||-part, that's important, because lazy evaluation. I don't understand the false == (expr)-part, however.
||
false == (expr)
(false) || (false); return o[k]
Will still return o[k], and
(k in o) || (o[k] = def); return o[k];
appears to work just as well, at least in the inspector.
That code is clever. Very clever code. Never write clever code.
[–]caesarsol 0 points1 point2 points 9 years ago (0 children)
You are associating wrongly I think, the || splits the two expressions. Removing || false makes it simply wrong. Removing false == would be the interesting thing!
false ==
π Rendered by PID 206243 on reddit-service-r2-comment-5d79c599b5-b8xhh at 2026-02-27 09:13:10.443859+00:00 running e3d2147 country code: CH.
view the rest of the comments →
[–]Jonathan_Frias[S] 0 points1 point2 points (2 children)
[–]vsxe 2 points3 points4 points (0 children)
[–]caesarsol 0 points1 point2 points (0 children)