Bizarre JavaScript Behaviours from the 'Wat' Talk for CodeMash 2012
In the thought-provoking 'Wat' talk at CodeMash 2012, a series of peculiar JavaScript quirks were highlighted. These behaviours raise questions about how JavaScript operates behind the scenes.
Additive Operator and Arrays
The addition operator ( ) poses unique challenges when used with arrays:
-
[] []: Unexpectedly, the concatenation of two empty arrays results in an empty string.
-
[] {}: The addition of an empty array and an object yields "[Object]", suggesting that the operator converts the array to a primitive.
-
{} []: This behavior varies depending on the JavaScript engine. While the video suggests the result should be 0, some environments return "[Object]".
-
{} {}: Adding two objects results in "Object", indicating that JavaScript converts objects to strings when performing addition.
Subtracting Strings from Numbers
When operators are applied to values of different types, peculiarities arise:
-
Array(16).join("wat" - 1): This expression produces "NaNNaNNaNNaNNaNNaN". JavaScript coerces "wat" - 1 into NaN and concatenates it with the empty string to form the join argument.
Understanding these Quirks
To comprehend these behaviours, it's essential to delve into the ECMA-262 standard:
-
[] []: Arrays are converted to primitives using their toString() method, returning an empty string for empty arrays.
-
[] {}: Objects are also converted to primitives using toString(), resulting in "[object Object]" for non-empty objects.
-
{} []: Empty block statements have no return value, leading to unary returning 0 for an array (coerced to an empty string).
-
{} {}: The operator converts objects to strings, resulting in "[object Object]".
-
Array(16).join("wat" - 1): NaN results from attempting to subtract a number from a string.
Forced Expression Statement
In certain contexts, the {} syntax may be interpreted as an expression statement rather than an object literal, which can alter the expected outcome of operations.
Understanding these bizarre JavaScript behaviours is crucial for writing robust and predictable code, ensuring that your scripts perform as intended.
The above is the detailed content of Why Does JavaScript Produce Such Unexpected Results with the and - Operators?. For more information, please follow other related articles on the PHP Chinese website!