David Y.
—Consider the code below for evaluating a home loan application. Applicants for the loan must provide their income and can optionally provide a deposit to reduce the total amount of the loan.
const homeCost = 1000000; const loanPeriods = 240; function evaluateHomeLoanApplication(name, income, deposit) { const approvalThreshold = (homeCost - deposit) / loanPeriods; if (income >= approvalThreshold) { console.log(`Loan application for ${name} approved.`); } else { console.log(`Loan application for ${name} denied.`); } } evaluateHomeLoanApplication("John Smith", 4200); // application denied evaluateHomeLoanApplication("Jane Doe", 4000, 100000); // application approved
The first loan application will be denied, even though John Smith’s income is enough to cover the repayment. Why does this happen and how can we fix it?
When an argument is omitted from a function call, it will be given a value of undefined
. This causes our loan evaluation function above to attempt the following calculation:
const approvalThreshold = (1000000 - undefined) / 240
This will produce a result of NaN, leading our code to deny the loan even though the income
value provided is sufficient.
One way to avoid this would be to always specify a value of 0
for deposit
in our function call. A better way would be to assign a default value for deposit
, as below:
const homeCost = 1000000; const loanPeriods = 20 * 12; function evaluateHomeLoanApplication(name, income, deposit = 0) { const approvalThreshold = (homeCost - deposit) / loanPeriods; if (income >= approvalThreshold) { console.log(`Loan application for ${name} approved.`); } else { console.log(`Loan application for ${name} denied.`); } } evaluateHomeLoanApplication("Jane Doe", 4200); // application approved evaluateHomeLoanApplication("Jane Doe", 4000, 100000); // application approved
Parameters with default values should be included after parameters without default values. Default values can include the values of previously defined parameters, as below:
function submitLoanApplication(name, message = `Your loan application has been submitted, ${name}.`) { console.log(message); } submitLoanApplication("Jane Doe"); // will print "Your loan application has been submitted, Jane Doe." submitLoanApplication("John Smith", "A custom message."); // will print "A custom message."
Tasty treats for web developers brought to you by Sentry. Get tips and tricks from Wes Bos and Scott Tolinski.
SEE EPISODESConsidered “not bad” by 4 million developers and more than 100,000 organizations worldwide, Sentry provides code-level observability to many of the world’s best-known companies like Disney, Peloton, Cloudflare, Eventbrite, Slack, Supercell, and Rockstar Games. Each month we process billions of exceptions from the most popular products on the internet.
Here’s a quick look at how Sentry handles your personal information (PII).
×We collect PII about people browsing our website, users of the Sentry service, prospective customers, and people who otherwise interact with us.
What if my PII is included in data sent to Sentry by a Sentry customer (e.g., someone using Sentry to monitor their app)? In this case you have to contact the Sentry customer (e.g., the maker of the app). We do not control the data that is sent to us through the Sentry service for the purposes of application monitoring.
Am I included?We may disclose your PII to the following type of recipients:
You may have the following rights related to your PII:
If you have any questions or concerns about your privacy at Sentry, please email us at compliance@sentry.io.
If you are a California resident, see our Supplemental notice.