I\'ve always wondered why Javascript has the global Math object instead of giving numbers their own methods. Is there a good reason for it?
Also are there any drawbacks
The reason for the Math
object is simple: "because Java does it". Not the best of reasons, but here we are. I guess things made more sense back then, before Douglas Crockford started his campaign to suppress half the language*. Originally you were "allowed", or meant, to do things like this:
with (Math) {
var n = min( round(a) * round(b), sqrt(c) );
var result = exp( n + d );
}
The drawback to extending Number.prototype
is that someone else might do the same thing. Or worse, for example, define Number.prototype.round
as a symmetrical rounding function.
If you are looking for ways to make your life easier, why stop there? Why not simply include Math
functions as global functions?
var m = 'abs acos asin atan atan2 ceil cos exp floor log max min ' +
'pow random round sin sqrt tan PI').split(' ');
for (var i=0,l=m.length; i
This will drop all the math functions into the global scope, effectively allowing you to stop typing "Math." Ask yourself: Is there any real difference between extending Number
and extending window
with these functions?
* Before you flame me: The Crockford comment is not meant to be taken too seriously. I do agree with him that with
is very dangerous in an implicit global environment.