As you already know, strings in JavaScript must be quoted. It may occure that all characters of the string will be numbers:
let a = '123';
In this case, the variable a
is
also a string, but with some nuance.
The essence of the nuance is as follows: if you perform any mathematical operation on a string with numbers, this one will be performed as if we really had numbers, not strings:
alert('2' * '3'); // shows 6
In this case, JavaScript registers our try to perform an operation that is illegal for strings, but valid for numbers.
It also registers that our strings are actually quoted numbers. Therefore, JavaScript automatically converts these strings to numbers and performs the appropriate mathematical operation on them.
This works if our strings contain only
numbers. If there is at least one letter - JavaScript
will consider the operation incorrect and
return value NaN
as the result of it:
alert('2' * '3s'); // shows NaN
Also, automatic conversion occurs if the operation is mathematically correct but invalid for strings.
For example, strings cannot (but numbers can) be multiplied, divided, subtracted, so in all such operations there will be an automatic conversion of strings with numbers into numbers.
However, strings, like numbers, are
added using the +
operator. It
means that in the case of addition,
there will be no automatic transformation:
let a = '1' + '2';
alert(a); // shows '12' - strings concatenation happened
If one of the terms is a number and the other is a string, then the string always wins:
let a = 1 + '2';
alert(a); // shows '12'
In such cases, JavaScript, on the contrary, automatically converts numbers to strings and performs strings concatenation.
However, there are nuances when there are more than two terms: in this case, the conversion to a specific type depends on the order in which the operations are performed.
In the following example, first 2
and 3
will be added as numbers,
and then the result will be added to the
string '1'
already as the string
'5'
, resulting in the string '15'
:
let a = '1' + (2 + 3);
alert(a); // shows '15'
If you remove the parentheses, then
everything will be added from left to right.
That is, first the number 2
will be
added with the string '1'
and the
result will be the string '12'
.
Then the number 3
will be added
to this string and the result will be
the string '123'
:
let a = '1' + 2 + 3;
alert(a); // shows '123'
But in the next example, the numbers
2
and 3
are written at the
beginning, so they will first be added as
numbers, resulting in the number 5
,
and then to the string '1'
will be
added to this number, resulting in the
string '51'
:
let a = 2 + 3 + '1';
alert(a); // shows '51'
Without running the code, determine what will be displayed on the screen:
let a = '5' + '2';
alert(a);
Without running the code, determine what will be displayed on the screen:
let a = '5' + 2;
alert(a);
Without running the code, determine what will be displayed on the screen:
let a = 5 + '2';
alert(a);
Without running the code, determine what will be displayed on the screen:
let a = 5 + 2;
alert(a);
Without running the code, determine what will be displayed on the screen:
let a = '5' * '2';
alert(a);
Without running the code, determine what will be displayed on the screen:
let a = '5' - '2';
alert(a);
Without running the code, determine what will be displayed on the screen:
let a = '5' / '2';
alert(a);
Without running the code, determine what will be displayed on the screen:
let a = '5' % '2';
alert(a);
Without running the code, determine what will be displayed on the screen:
let a = '5s' * '2';
alert(a);
Without running the code, determine what will be displayed on the screen:
let a = '5s' + '2';
alert(a);
Without running the code, determine what will be displayed on the screen:
let a = (-'5') + (-'2');
alert(a);
Without running the code, determine what will be displayed on the screen:
let a = '5' * 1 + '2' * 1;
alert(a);
Without running the code, determine what will be displayed on the screen:
let a = '5' * '1' + '2' * '1';
alert(a);
Without running the code, determine what will be displayed on the screen:
let a = '' + 3 + 1;
alert(a);