September, 29 2016: PHP
The correct answer is 18.
PHP supports automatic type conversion based on the context in which a variable or value is being used.
If you perform an arithmetic operation on an expression that contains a string, that string will be interpreted as the appropriate numeric type for the purposes of evaluating the expression. So, if the string begins with one or more numeric characters, the remainder of the string (if any) will be ignored and the numeric value is interpreted as the appropriate numeric type. On the other hand, if the string begins with a non-numeric character, then it will evaluate to zero.
With that understanding, we can see that “15%” evaluates to the numeric value 15 and “$25” evaluates to the numeric value zero, which explains why the result of the statement $x = 3 + “15%” + “$25” is 18 (i.e., 3 + 15 + 0).
The code above prints 5.
The trick of this question is that in the IIFE there are two assignments but the variable a is declared using the keyword var. What this means is that a is a local variable of the function. On the contrary, b is assigned to the global scope.
The other trick of this question is that it doesn’t use strict mode (
'use strict';) inside the function. If strict mode was enabled, the code would raise the error
Uncaught ReferenceError: b is not defined. Remember that strict mode requires you to explicitly reference to the global scope if this was the intended behavior. So, you should write:
var a = window.b = 5;