Destructuring Assignment In Javascript introduces the concept and syntax of destructuring assignment, but leaves an important question unanswered: Why should you care?
Here’s one scenario where it might be nice: when you’re using configuration objects.
Lots of JS functions take a single object with multiple optional properties. You might think of these as “configuration objects” or “options parameters” or something along those lines.
Think about when you do this:
$.ajax({
url: 'https://localhost/getSomeStuff',
cache: false,
dataType: 'json',
timeout: 5000
});
You’re passing a bunch of values into $.ajax
via properties of the single object you pass into it. Each of those properties is optional. (But $.ajax
does have default values for all those things.)
What does $.ajax
have to do to handle those things? (I’ll butcher this. Bear with me.)
function ajax(options) {
options = options !== undefined ? options : {};
let url = options.url !== undefined ? options.url : '';
let cache = options.cache !== undefined ? options.cache : true;
let dataType = options.dataType !== undefined ? options.dataType : 'text';
let timeout = options.timeout !== undefined ? options.timeout : 0;
// now do stuff...
}
It takes the single options
parameter and defines a bunch of local variables from properties of options
, falling back to default values when those properties aren’t present. Then it does its AJAX-y magic, blah blah blah.
Destructuring assignment and default parameters can make this a little cleaner:
function ajax({
url = '',
cache = true,
dataType = 'text',
timeout = 0
} = {}) {
// now do stuff...
}
This version of ajax
replaces the options
parameter from our first implementation with a destructuring assignment that defines and initializes the local variables url
, cache
, dataType
and timeout
. Clearly there’s much less code here. Lots of folks will find this version preferable.