A horrible Javascript misfeature, second only to default global scope. I always use semicolons, but as the article notes even if you do that you still have to be aware of how automatic insertion works.
From the article, the only really nasty things are:
[a].forEach(fn(){})
[b].forEach(fn(){})
// Parses as [a][b]
return
a+b
// Parses as return;
You would have to work pretty hard to trigger the rest.
I'm curious about the speed trade offs from removing semicolons. You shrink the source code a little, but does the parser throwing exceptions all the time bump up execution time?
A parser would not normally handle this kind of thing with exceptions, and any cost would only be paid once, at parse time when building a syntax tree, not at execution time. Very few languages interpret text directly, rather than interpreting trees, as the trees are far easier to work with, more efficient, etc.
I realize this is not the forum for this, but hopefully it will serve as a warning to others: the linked article does not scroll on the iPhone (horiz or vert orientation).
"Cool" layouts are all fun and games, but usability is king.
Every since I started using JSMin, I've needed to add semicolons after all my functions, which is something that I can't seem to remember to do as a habit.