5 ms·
Your inaccurate description gave me a small heart attack. We all know JavaScript is horrible, but that is next-level horrible. null is coerced to "null" when
by nilved 10y ago
Your inaccurate description gave me a small heart attack. We all know JavaScript is horrible, but that is next-level horrible.
null is coerced to "null" when it's needed as a string. This behaviour is similar to printf in C. It's not the case that "null" === null like True == 1 in Python. (This would be my interpretation of "x is represented by y".)
- throwanem 10y agoIf you want 'next-level horrible', open your browser's console and take a look at what you get back from "typeof null".
- valleyer 10y agoJavaScriptCore: >>> typeof null object >>> typeof "null" string >>> typeof (null + "") string
- menssen 10y agoSomething 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]
- throwanem 10y agoThe first of which is just my point. Null cannot be treated safely as an object in any way. To attempt such elicits an exception. Yet its type is 'object' nonetheless, needlessly complicating every type check that has to do with objects. I've been working with Javascript, professionally and as a hobbyist, since about 1995, and have yet to encounter any satisfactory reason why this should be the case. Edit: And a comment nearby explains that it is the way it is for the same reason Make barfs on leading spaces. Well, at least that's a reason! A terrible, terrible reason.