4 ms·
Something always bugs me about this criticism: #1 arguably makes sense. Unless "null" were a "type" (which it isn't), the other possible options for this ("und
by menssen 10y ago
Something always bugs me about this criticism:
#1 arguably makes sense. Unless "null" were a "type" (which it isn't), the other possible options for this ("undefined", or "string", "number", "array", etc.) all make less sense.
#2 is expected/correct.
#3 makes sense if you accept that the "+" operator aggressively casts its arguments to strings when they are anything other than two numbers. Arguably that's a bad design, but it's not unexpected or unpredictable.
The one completely unexplainable "+" behavior I know of in JS (i.e., a recent node/v8) is the second of these:
> [] + {}
'[object Object]' // makes sense because the string representation of [] is ''
> {} + []
0 // ???
> var x = {} + []
undefined
> x
'[object Object]' // but assigning to a variable first makes sense again
- masklinn 10y ago> #1 arguably makes sense. Unless "null" were a "type" (which it isn't), the other possible options for this ("undefined", or "string", "number", "array", etc.) all make less sense. `typeof` gets the primitive type of a value, and exactly like undefined null is a primitive value with its own primitive type, as `typeof undefined` returns `"undefined"` `typeof null` was supposed to return `"null"`, it doesn't due to a bug in the original implementation which was then spec-enshrined as fixing it would break too much stuff: http://www.2ality.com/2013/10/typeof-null.html http://www.2ality.com/2013/10/typeof-null.html
- codepsycho 10y agoThis is because: > [] + {} Becomes: > [].toString() + {}.toString() Empty array to a string is "" (empty string). Object to string is "[object Object]". > {} + [] Becomes: > +[] The prefix turns the array into a number, same as Number([]). This seems to be because {} is interpreted as a code block, not an object, due to it being the first thing. Put it in parentheses and it'll do toString like before.
- BerislavLopac 10y agoAnd now the obligatory WAT video: https://www.destroyallsoftware.com/talks/wat https://www.destroyallsoftware.com/talks/wat
- deleted 10y ago[deleted]