Skip to content

Instantly share code, notes, and snippets.

@jgphilpott
Last active September 20, 2023 13:35
Show Gist options
  • Save jgphilpott/6332dc7f5636db9ba455e1575407c496 to your computer and use it in GitHub Desktop.
Save jgphilpott/6332dc7f5636db9ba455e1575407c496 to your computer and use it in GitHub Desktop.
A collection of JavaScript Number prototype updates.
# Info: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty
# Info: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number
# Source: https://gist.github.com/jgphilpott/6332dc7f5636db9ba455e1575407c496
# Credit: https://stackoverflow.com/a/7312534/1544937
Object.defineProperty Number.prototype, "round",
value: (decimals = 0) ->
parseFloat this.toFixed decimals
configurable: false,
enumerable: false,
writable: false
Object.defineProperty Number.prototype, "zero",
value: ->
not Math.abs this
configurable: false,
enumerable: false,
writable: false
Object.defineProperty Number.prototype, "positive",
value: ->
this > 0
configurable: false,
enumerable: false,
writable: false
Object.defineProperty Number.prototype, "negative",
value: ->
this < 0
configurable: false,
enumerable: false,
writable: false
Object.defineProperty Number.prototype, "integer",
value: ->
this % 1 is 0
configurable: false,
enumerable: false,
writable: false
Object.defineProperty Number.prototype, "float",
value: ->
this % 1 isnt 0
configurable: false,
enumerable: false,
writable: false
Object.defineProperty Number.prototype, "even",
value: ->
if this % 1 isnt 0
return null
else
return (this & 1) is 0
configurable: false,
enumerable: false,
writable: false
Object.defineProperty Number.prototype, "odd",
value: ->
if this % 1 isnt 0
return null
else
return (this & 1) isnt 0
configurable: false,
enumerable: false,
writable: false
Object.defineProperty Number.prototype, "abs",
value: ->
Math.abs this
configurable: false,
enumerable: false,
writable: false
Object.defineProperty Number.prototype, "boolean",
value: ->
Boolean Math.abs this
configurable: false,
enumerable: false,
writable: false
Object.defineProperty Number.prototype, "number",
value: ->
Number this
configurable: false,
enumerable: false,
writable: false
Object.defineProperty Number.prototype, "string",
value: ->
String this
configurable: false,
enumerable: false,
writable: false
Object.defineProperty Number.prototype, "array",
value: ->
Array this
configurable: false,
enumerable: false,
writable: false
Object.defineProperty Number.prototype, "object",
value: ->
Object this
configurable: false,
enumerable: false,
writable: false
// Info: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty
// Info: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number
// Source: https://gist.github.com/jgphilpott/6332dc7f5636db9ba455e1575407c496
// Credit: https://stackoverflow.com/a/7312534/1544937
Object.defineProperty(Number.prototype, "round", {
value: function(decimals = 0) {
return parseFloat(this.toFixed(decimals));
},
configurable: false,
enumerable: false,
writable: false
});
Object.defineProperty(Number.prototype, "zero", {
value: function() {
return !Math.abs(this);
},
configurable: false,
enumerable: false,
writable: false
});
Object.defineProperty(Number.prototype, "positive", {
value: function() {
return this > 0;
},
configurable: false,
enumerable: false,
writable: false
});
Object.defineProperty(Number.prototype, "negative", {
value: function() {
return this < 0;
},
configurable: false,
enumerable: false,
writable: false
});
Object.defineProperty(Number.prototype, "integer", {
value: function() {
return this % 1 === 0;
},
configurable: false,
enumerable: false,
writable: false
});
Object.defineProperty(Number.prototype, "float", {
value: function() {
return this % 1 !== 0;
},
configurable: false,
enumerable: false,
writable: false
});
Object.defineProperty(Number.prototype, "even", {
value: function() {
if (this % 1 !== 0) {
return null;
} else {
return (this & 1) === 0;
}
},
configurable: false,
enumerable: false,
writable: false
});
Object.defineProperty(Number.prototype, "odd", {
value: function() {
if (this % 1 !== 0) {
return null;
} else {
return (this & 1) !== 0;
}
},
configurable: false,
enumerable: false,
writable: false
});
Object.defineProperty(Number.prototype, "abs", {
value: function() {
return Math.abs(this);
},
configurable: false,
enumerable: false,
writable: false
});
Object.defineProperty(Number.prototype, "boolean", {
value: function() {
return Boolean(Math.abs(this));
},
configurable: false,
enumerable: false,
writable: false
});
Object.defineProperty(Number.prototype, "number", {
value: function() {
return Number(this);
},
configurable: false,
enumerable: false,
writable: false
});
Object.defineProperty(Number.prototype, "string", {
value: function() {
return String(this);
},
configurable: false,
enumerable: false,
writable: false
});
Object.defineProperty(Number.prototype, "array", {
value: function() {
return Array(this);
},
configurable: false,
enumerable: false,
writable: false
});
Object.defineProperty(Number.prototype, "object", {
value: function() {
return Object(this);
},
configurable: false,
enumerable: false,
writable: false
});
@jgphilpott
Copy link
Author

Prototyping

This gist is part of a collection of gists that extend JavaScript data prototypes such as Boolean, Number, String, Array and Object. See below for links to all the gists:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment