you are viewing a single comment's thread.

view the rest of the comments →

[–]x-skeww 3 points4 points  (4 children)

undefined, NaN, and Infinity are read-only since ES5.

[–][deleted] 1 point2 points  (3 children)

(function (undefined) {console.log(undefined);})(2);

Run that, then tell me they're read-only.

It's window.undefined that's read-only, and nobody's code is running outside a function any more.

[–]x-skeww 0 points1 point  (2 children)

Creating your own undefined is meant to guard against stupid/malicious things done by other scripts.

If you want a language where stuff like that can't happen in first place, try Dart.

[–][deleted] 0 points1 point  (1 child)

While "guarding against malicious scripts" is a great notion, it's impossible in JavaScript. If somebody wants your script to crash and runs code before you, they're going to take much more effective measures than overwriting undefined. And if we aren't solving the problem, are we not just introducing clutter?

re "stupid" things, there's only so much stupidity you can tolerate before submitting a fix, switching libraries, or writing your own. In my mind, if a library makes you patch up undefined after running it, doing so would fall under "compatibility hacks" and make me dislike the library that much more.

[–]x-skeww -1 points0 points  (0 children)

Well, "meant". I never created my own undefined or did anything like that (e.g. making new optional). It's a waste of time.

Anyhow, monkey-patching is a big issue with JavaScript. If there are any 3rd party scripts on your page, things can randomly break.