JS++ replaces the “void” keyword as a type annotation rather than being like JavaScript which dictates that “void” is a keyword used to evaluate an expression and always returns undefined. This doesn’t serve much practical purpose. You can accomplish the same effect in many other ways:
// Original var a = void foo(); // Equivalent to: var b = (foo(), undefined); var c = (function(){ foo(); })(); // ... etc
Furthermore, “void” is very rarely used in real-world JavaScript. This is why I always say it takes an experienced JavaScript programmer to design a JavaScript superset. It takes someone with deep experience in JavaScript to identify this in order to make such a breaking change with confidence. If you’re introducing a breaking change, make sure it’s just breaking the 1% and not the 99%.
The enlightened few will use void 0
in place of undefined
because the ECMAScript 3 standard defines undefined
as a global property that can be defined!
JS++, on the other hand, makes undefined
a keyword. void
is then used as a type which represents both null
and undefined
.
Finally, there have been informal plans for a JS to JS++ translator. This will handle those few instances where void 0
is used to mean undefined
and such. These cases are easy to parse and identify, and it makes introducing such a breaking change fathomable.