 The datatype _Number_ is used for various purposes in [JavaScript](https://hackernoon.com/tagged/javascript). Starting with ES6, _Number_ has a number of improvements to help the [programmer](https://hackernoon.com/tagged/programmer) save time as well as code efficiently. Here are some new features that ES6 brings to our favorite datatype. ### Binary and Octal Literals For starters, programmers can now use prefixes to represent the different number systems in ES6. So for representing binary digits, the **prefix _0b_** can be used while for representing octal numbers, the **prefix _0o_** can be used.  ### **Number.NaN** _Number.NaN is_ different than its _global_ counterpart. It does not cast it’s input through Number(value) before comparision. _Number.NaN_ returns if the provided value IS NaN.  The confusing thing is, **_typeof NaN === number_** So, **_typeof value === number_**, does not accurately tell you if value is a number. It gives the set of all numbers AND NaN So, a more accurate way to determine if value is a number is: **_typeof value === ‘number’ && !Number.isNaN(value)_** Of course, other ways of working around values being incorrectly described as numbers include, **_Number(x) === x_** which will return true for numbers only. ### Number.isFinite _Number.isFinite_ differs from the global isFinite as well, in that _Number.isFinite_ does not cast values through Number(value) before evaluation. Global isFinite will evaluate non-numbers as finite! This is because global isFinite is casting values to Number(value) before evaluation. For instance, Non-numbers cast to numbers can equal 0. **_Number(null)===0_**  _Number.isFinite_ is superior in this regard. ### Number.isInteger This is new in ES6, and will determine if a number is an integer. No casting to Number() is done, so you can be sure non-numbers like null will evaluate false.  ### Number.parseInt, Number.parseFloat _Number.parseInt_ and _Number.parseFloat_ behave exactly as their _global_ counterparts without exceptions. ### _Number.MAX\_SAFE\_INTEGER, Number.MIN\_SAFE\_INTEGER_ These represent the largest and smallest numbers that can be safely and precisely represented in the JavaScript implementation, which is bounded by the IEEE floating point limit (IEEE 754) of 2⁵³-1  Of course, the MIN safe integer is the _negative_ of the MAX number. Remember how computers store numbers in memory. ### Number.isSafeInteger Number.isSafeInteger simply returns if the provided number is between the MIN and MAX values above.  ### Number.EPSILON Rounding errors occur in JavaScript when floating point (decimal) numbers cannot be represented accurately enough by the system. For instance, shockingly enough **_.1 plus .2 does not equal .3!_**  _Number.EPSILON_ provides an acceptable margin of error for use in computations. So, can be used to determine an acceptable margin of error, like this:  Numbers in ES6 have come a long way and while there is still room for improvement, enhancements like this help to make ES6 better than previous JavaScript versions.