5 ms·
In JavaScript, "0 < -1 < 2" evaluates to true. The coercion rules were a big surprise to me when I first started to work in JS. Sometimes codes were obvious bu
by jameson 7y ago
In JavaScript, "0 < -1 < 2" evaluates to true.
The coercion rules were a big surprise to me when I first started to work in JS. Sometimes codes were obvious but the underlying interpretation is a surprise call.
- geerlingguy 7y agoReminds me of https://www.destroyallsoftware.com/talks/wat https://www.destroyallsoftware.com/talks/wat Javascript is convenient for many use cases, but it definitely violates POLA on many levels, in many situations!
- saagarjha 7y agoAnd it does in C as well!
- r00fus 7y agoSo does this mean that JS does satisfy the principle of least astonishment for an experienced c-coder (something important when it was developed in the early 2000s)? In what language (other than a RPN based language like Lisp) would this expect to return something meaningful?
- dingo_bat 7y ago> So does this mean that JS does satisfy the principle of least astonishment for an experienced c-coder No, this means don't use weird ambiguous syntax even if it is legal in the language.
- saagarjha 7y agoYes, you could say that. It preserves the order of operations and “reverse-truthiness” (i.e. boolean-to-integer) conversions from C.
- skrebbel 7y ago0 < -1 < 2 To be fair, is there any mainstream language other than Python where that expression makes sense at all? And even Python had to make explicit, syntactical support for it, and IMO it's a pretty non-obvious language hack. I mean, there's an invisible AND in there, that's pretty astonishing to me at least :-)
- benatkin 7y agoIt's a big ask, to have a binary operator and ternary operator that use the same symbol.
- Doxin 7y agoIt's honestly some fairly trivial AST-twiddling to support that feature. the compiler can simply detect cases where the left-hand-side of a comparison is /also/ a comparison and change the AST to make it two comparisons combined with an AND statement. That said I find comparison chaining rather confusing and unexpected so I make a point of avoiding its use. Typing it out as two comparisons hardly saves any effort in any case.
- benatkin 7y agoI know, but it isn't a very useful feature, so why bother?
- ghettoimp 7y agoWorks beautifully in Common Lisp. Of course, it is not mainstream. ? (< 0 1 2) T ? (< 0 -1 2) NIL
- deleted 7y ago[deleted]
- jdminhbg 7y agoIn Clojure: user=> (< 0 1 2) true And user=> (< 0 -1 2) false
- deleted 7y ago[deleted]