Search code examples
javascriptnumbersmetaprogramming

Changing the functionality of numbers in JS (for educational purposes)


I was wondering if there was some way to change the Number object (or other objects) so that when expressions like 4(3 - 1) are ran, instead of throwing an error, the result is the same as 4 * (3 - 1) or 8. Maybe along the lines of turning numbers into functions? If anyone knows of any methods (other than changing the coding editor directly) I'd appreciate the help.


Solution

  • You can't make primitives callable in JavaScript.

    If you want to make an evaluator that allows brackets, make something like

    function myEval(text) {
      // 123(234)567 => 123 * (234)567
      text = text.replaceAll(/(\d) *\(/g, '$1 * (')
      // 123(234)567 => 123(234) * 567
      text = text.replaceAll(/\) *(\d)/g, ') * $1')
      return eval(text)
    }