| String | Number | `NaN`, except if string represents a number |
| | | `"5"` --> `5`, `"0.001"` --> `0.001` |
| Array | Number | `0` if empty array, number if the only |
| | | element is a number, `NaN` in any other case |
| Object, Function, undefined | Number | `NaN` |
| null | Number | `0` |
| Symbol | Number | THROWS! |
> Side note: I won't go too deep into operators, but a common misunderstanding among amateurs is that the "+" operator behaves unexpectedly. In fact, it does not. It's simply that the same operator acts as one of "summation" (when dealing with numbers), "concatenation" (when dealing with strings), or the "unary plus" operators depending on context. Anything else you attempt to pass to it will result in coercion to either a string or number. We'll come back to this.