I would like a JavaScript function to have optional arguments which I set a default on, which gets used if the value isn't defined. In Ruby you can do it like this:
def read_file(file, delete_after = false)
# code
end
Does this work in JavaScript?
function read_file(file, delete_after = false) {
// Code
}
This assigns to
delete_after
the value ofdelete_after
if it is not a falsey value otherwise it assigns the string"my default here"
. For more detail, check out Doug Crockford's survey of the language and check out the section on Operators.This approach does not work if you want to pass in a falsey value i.e.
false
,null
,undefined
,0
or""
. If you require falsey values to be passed in you would need to use the method in Tom Ritter's answer.When dealing with a number of parameters to a function, it is often useful to allow the consumer to pass the parameter arguments in an object and then merge these values with an object that contains the default values for the function
to use
I find something simple like this to be much more concise and readable personally.
As an update...with ECMAScript 6 you can FINALLY set default values in function parameter declarations like so:
As referenced by - http://es6-features.org/#DefaultParameterValues
ES6: As already mentioned in most answers, in ES6, you can simply initialise a parameter along with a value.
ES5: Most of the given answers aren't good enough for me because there are occasions where I may have to pass falsey values such as
0
,null
andundefined
to a function. To determine if a parameter is undefined because that's the value I passed instead of undefined due to not have been defined at all I do this:being a long time C++ developer (Rookie to web development :)), when I first came across this situation, I did the parameter assignment in the function definition, like it is mentioned in the question, as follows.
But beware that it doesn't work consistently across browsers. For me it worked on chrome on my desktop, but did not work on chrome on android. Safer option, as many have mentioned above is -
Intention for this answer is not to repeat the same solutions, what others have already mentioned, but to inform that parameter assignment in the function definition may work on some browsers, but don't rely on it.
From ES6/ES2015, default parameters is in the language specification.
just works.
Reference: Default Parameters - MDN
You can also simulate default named parameters via destructuring:
Pre ES2015,
There are a lot of ways, but this is my preferred method - it lets you pass in anything you want, including false or null. (
typeof null == "object"
)