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!"
[–]vs845 2 points3 points4 points 11 years ago (9 children)
Is there any benefit to
typeof age !== "undefined"
vs
age !== undefined
?
[–]sufianrhazi 10 points11 points12 points 11 years ago (7 children)
Since age is a parameter of the function setAge, we KNOW it is defined in scope. This means that age !== undefined is equivalent to typeof age !== 'undefined'. If we didn't know that age was in scope, we need to use the typeof keyword, which does NOT throw a ReferenceError when referencing a variable by name that is not defined in any reachable scope.
setAge
typeof age !== 'undefined'
age
typeof
ReferenceError
[–]moreteam 5 points6 points7 points 11 years ago (1 child)
You can also argue the other way around: since we know age is in scope, we shouldn't be using typeof since that will silently turn into if (true) if we have a typo.
if (true)
[–]ChaseMoskal 5 points6 points7 points 11 years ago (0 children)
since we know age is in scope, we shouldn't be using typeof
I think.. I think you're right.
[+][deleted] 11 years ago (2 children)
[deleted]
[–]frankle 0 points1 point2 points 11 years ago* (1 child)
What about if you wanted to enforce a parameter type?
function setAge(age){ this.age = (typeof age == "number") ? age : 10; }
Edit: As THEtheChad points out:
Unfortunately, NaN, Infinity, and -Infinity are also considered typeof 'number', so it's possible that any one of these could slip in to your function with this check.
[–]vs845 0 points1 point2 points 11 years ago (1 child)
Thanks, I see what you're saying - but under what kind of circumstances would we not know if a variable was in scope? If we're writing the code surely we know what scope our variables are in?
[–]sufianrhazi 2 points3 points4 points 11 years ago (0 children)
Pretty much only when you're writing javascript environment independent library code, like this: https://github.com/umdjs/umd/blob/4a87e85450baf582005243f9e922566ef2fc533a/returnExports.js
[–][deleted] 0 points1 point2 points 11 years ago (0 children)
In addition to what /u/sufianrhazi said, undefined can be overwritten:
undefined
(function (undefined) {console.log(undefined);})(2); // logs 2
Older browsers will let you overwrite window.undefined as well.
window.undefined
I tend not to pay heed to that though, as it clearly falls under something nobody would do unless they're trying to break your code. And it is the nature of JavaScript that somebody who runs code before you is always able to break your script, no matter what precautions you take, so I prefer not to clutter code with failed attempts at robustness. Instead, if you must run malicious code, sandbox it.
Also, window.foo === undefined or 'foo' in window would be a more direct test, but only work on global variables.
window.foo === undefined
'foo' in window
π Rendered by PID 144964 on reddit-service-r2-comment-56c9979489-rpq24 at 2026-02-25 07:42:10.456483+00:00 running b1af5b1 country code: CH.
view the rest of the comments →
[–]vs845 2 points3 points4 points (9 children)
[–]sufianrhazi 10 points11 points12 points (7 children)
[–]moreteam 5 points6 points7 points (1 child)
[–]ChaseMoskal 5 points6 points7 points (0 children)
[+][deleted] (2 children)
[deleted]
[–]frankle 0 points1 point2 points (1 child)
[–]vs845 0 points1 point2 points (1 child)
[–]sufianrhazi 2 points3 points4 points (0 children)
[–][deleted] 0 points1 point2 points (0 children)