Performing unary plus or minus, or performing arithmetic operations may
implicitly convert non-numeric values to numeric ones.

If an addition is performed and either operand is a string, the other
operand is converted into a string as well and the addition result is a
concatenated string consisting of the two operand values.

-- Expect stdout --
HelloWorld
12
34
true
false
null
{ "some": "object" }
[ "some", "array" ]
function() { ... }
1.2
Infinity
124
123
123
NaN
NaN
NaN
124.2
Infinity
1
0
0
NaN
NaN
NaN
1.2
Infinity
123
12.3
NaN
-1
0
0
NaN
NaN
NaN
-1.2
-Infinity
-123
-12.3
NaN
4.2
9.6
-- End --

-- Testcase --
{%
	print(join("\n", [

		// Adding two strings concatenates them:
		"Hello" + "World",

		// Adding a number to a string results in a string:
		"1" + 2,

		// Adding a string to a number results in a string:
		3 + "4",

		// Adding any non-string value to a string or vice versa will
		// force stringification of the non-string value
		"" + true,
		"" + false,
		"" + null,
		"" + { some: "object" },
		"" + [ "some", "array" ],
		"" + function() {},
		"" + 1.2,
		"" + (1 / 0),

		// Adding a numeric value to a non-string, non-numeric value
		// or vice versa will convert the non-numeric argument to a
		// number
		123 + true,
		123 + false,
		123 + null,
		123 + { some: "object" },
		123 + [ "some", "array" ],
		123 + function() {},
		123 + 1.2,
		123 + (1 / 0),

		// The unary "+" operator follows the same logic as adding a
		// non-numeric, non-string value to a numeric one. Additionally
		// the unary plus forces conversion of string values into numbers
		+true,
		+false,
		+null,
		+{ some: "object" },
		+[ "some", "array" ],
		+function() {},
		+1.2,
		+(1 / 0),
		+"123",
		+"12.3",
		+"this is not a number",

		// The unary "-" operator functions like the unary "+" one and
		// it additionally returns the negation of the numeric value
		-true,
		-false,
		-null,
		-{ some: "object" },
		-[ "some", "array" ],
		-function() {},
		-1.2,
		-(1 / 0),
		-"123",
		-"12.3",
		-"this is not a number",

		// Adding a double to an integer or vice versa will force the
		// result to a double as well
		1.2 + 3,
		4 + 5.6,

	"" ]));
-- End --
