David Y.
—Consider the following code:
console.log("1 + 1 = " + 1 + 1);
The output of the final line will be “1 + 1 = 11”. Why does this happen, and how can we get the correct answer?
JavaScript is a weakly typed language. While it recognizes different variable types (numbers, strings, booleans, etc.), it does not have strict rules about what types a specific variable can contain, or how they should be used in expressions. When faced with a situation such as the above code, where an operator like +
is used on values of different types, JavaScript will usually implicitly convert one of those types rather than throwing an error. This can have unexpected results.
The problem above arises from the dual meaning of +
. When used with numbers, +
is the addition operator, and 1 + 1 == 2
. But when used with strings, +
is the concatenation operator, used to join two or more strings, and so "1" + "1" == "11"
.
In the code above, JavaScript has decided that we probably want a concatenated string rather than a final sum, and so it has converted both numbers into strings. The interpreter makes this decision based on the order of operations.
Note that subtraction would produce the opposite result:
console.log("1" - 1); // will print "0"
Here, the string “1” is implicitly converted into a number, as -
does not describe a valid string operation.
To get a string containing the correct sum from our original code, we will need to modify it to remove the ambiguity that causes JavaScript to perform implicit type conversions. We can do this the same way we would remove ambiguity from a mathematical expression – by using brackets.
console.log("1 + 1 = " + (1 + 1)); // will print "1 + 1 = 2"
In the above code, two numbers are added, and the final result of that addition is converted into a string and appended to the first string.
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.