/**
* Number
* JavaScript 的 Number 对象是经过封装的能让你处理数字值的对象。
* Number 对象由 Number() 构造器创建。
* JavaScript的Number类型为双精度IEEE 754 64位浮点类型。
* 最近出了stage3BigInt 任意精度数字类型,已经进入stage3规范
* value 被创建对象的数字值。
* Number 对象主要用于:
* 如果参数无法被转换为数字,则返回 NaN。
* 在非构造器上下文中 (如:没有 new 操作符),Number 能被用来执行类型转换。
* => number / number_object
*/
//Number() / new Number()
const num1 = Number(1);
const num2 = new Number(1);
const num3 = 1;
// console.log(num1 === num2, num1 === num3);
// console.log(num1.__proto__ === Number.prototype,
// num2.__proto__ === Number.prototype);//true,true
/**
* Number.EPSILON 属性表示 1 与Number可表示的大于 1 的最小的浮点数之间的差值。
* 你不必创建一个 Number 对象来访问这个静态属性(直接使用 Number.EPSILON)
*/
/**
* Number.MAX_SAFE_INTEGER 常量
* 表示在 JavaScript 中最大的安全整数(maxinum safe integer)(2^53 - 1)。
* writable false
* enumerable false
* configurable fals
*/
/**
* Number.MAX_VALUE 属性表示在 JavaScript 里所能表示的最大数值。
* MAX_VALUE 属性值接近于 1.79E+308。大于 MAX_VALUE 的值代表 "Infinity"。
* 因为 MAX_VALUE 是 Number 对象的一个静态属性,
* 所以你应该直接使用Number.MAX_VALUE ,而不是作为一个创建的 Number 实例的属性。
*/
/**
* Number.MIN_SAFE_INTEGER 代表在 JavaScript中最小的安全的integer型数字 (-(2^53 - 1)).
* IN_SAFE_INTEGER 的值是-9007199254740991.
* 形成这个数字的原因是 JavaScript 在 IEEE 754中
* 使用double-precision floating-point format numbers 作为规定。
* 在这个规定中能安全的表示数字的范围在-(2^53 - 1) 到 2^53 - 1之间.
* 由于MIN_SAFE_INTEGER 是Number的一个静态属性,你可以直接使用Number.MIN_SAFE_INTEGER,
* 而不是自己去创建一个Number的属性。
*/
/**
* Number.MIN_VALUE 属性表示在 JavaScript 中所能表示的最小的正值。
* MIN_VALUE 属性是 JavaScript 里最接近 0 的正值,而不是最小的负值。
* MIN_VALUE 的值约为 5e-324。小于 MIN_VALUE ("underflow values") 的值将会转换为 0。
* 因为 MIN_VALUE 是 Number 的一个静态属性,
* 因此应该直接使用: Number.MIN_VALUE, 而不是作为一个创建的 Number 实例的属性。
*/
/**
* Number.NaN 表示“非数字”(Not-A-Number)。和 NaN 相同。
* 不必创建一个 Number 实例来访问该属性,使用 Number.NaN 来访问该静态属性。
*/
/**
* Number.NEGATIVE_INFINITY 属性表示负无穷大。
* 不用创建一个 Number 实例,使用 Number.NEGATIVE_INFINITY 来访问该静态属性。
*/
/**
* Number.POSITIVE_INFINITY 属性表示正无穷大。
* 不必创建一个 Number 实例,可使用 Number.POSITIVE_INFINITY 来访问该静态属性。
*/
/**
* Number.isFinite()
* Number.isFinite() 方法用来检测传入的参数是否是一个有穷数。
* => boolean
*/
//Number.isFinite(value)
const num4 = 4;
const num5 = Number.POSITIVE_INFINITY;
// console.log(Number.isFinite(num4), Number.isFinite(num5));//true,false
/**
* Number.isInteger() 方法用来判断给定的参数是否为整数。
* => boolean
*/
//Number.isInteger(value)
const num6 = 123;
const num7 = 123.123;
// console.log(Number.isInteger(num6), Number.isInteger(num7));//true,false
/**
* Number.isNaN() 方法确定传递的值是否为 NaN,并且检查其类型是否为 Number。
* 它是原来的全局 isNaN() 的更稳妥的版本。
* 在 JavaScript 中,NaN 最特殊的地方就是,
* 我们不能使用相等运算符(== (en-US) 和 === (en-US))来判断一个值是否是 NaN,
* 因为 NaN == NaN 和 NaN === NaN 都会返回 false。因此,必须要有一个判断值是否是 NaN 的方法。
* 和全局函数 isNaN() 相比,Number.isNaN() 不会自行将参数转换成数字,
* 只有在参数是值为 NaN 的数字时,才会返回 true。
* => boolean
*/
const num8 = 8;
const num9 = '9';
// Number.isNaN(value)
// console.log(Number.isNaN(num8), Number.isNaN(num9));//false,false
/**
* Number.isSafeInteger() 方法用来判断传入的参数值是否是一个“安全整数”(safe integer)。
* 一个安全整数是一个符合下面条件的整数:
* 可以准确地表示为一个IEEE-754双精度数字,
* 其IEEE-754表示不能是舍入任何其他整数以适应IEEE-754表示的结果。
* 比如,2^53 - 1 是一个安全整数,它能被精确表示,
* 在任何 IEEE-754 舍入模式(rounding mode)下,没有其他整数舍入结果为该整数。
* 作为对比,2^53 就不是一个安全整数,它能够使用 IEEE-754 表示,
* 但是 2^53 + 1 不能使用 IEEE-754 直接表示,
* 在就近舍入(round-to-nearest)和向零舍入中,会被舍入为 2^53。
* 安全整数范围为 -(2^53 - 1)到 2^53 - 1 之间的整数,包含 -(2^53 - 1)和 2^53 - 1。
* => boolean
*/
//Number.isSafeInteger(value)
/**
* Number.parseFloat() 方法可以把一个字符串解析成浮点数。
* 该方法与全局的 parseFloat() 函数相同,并且处于 ECMAScript 6 规范中(用于全局变量的模块化)。
* =>float_number / NaN
*/
//Number.parseFloat(string)
const num10 = '10';
const target10 = Number.parseFloat(num10);
// console.log(target10);//10
/**
* Number.parseInt() 方法依据指定基数 [ 参数 radix 的值],
* 把字符串 [ 参数 string 的值] 解析成整数。
* 参数radix:一个介于2到36之间的整数,代表字符串的基数(数学数字系统中的基)。
* 小心-这并不是默认为10。
* => number / NaN
*/
//Number.parseInt(string[, radix])
const num11 = Number.parseInt('100', 5);
// console.log(num11);//25
/**
* Number.prototype.toExponential()
* 以指数表示法返回该数值字符串表示形式。
*/
//numObj.toExponential(fractionDigits)
/**
* Number.prototype.toFixed()
* 使用定点表示法来格式化一个数值。
* => new number
*/
//num.toFixed()
const num13 = 123.4567;
// console.log(num13.toFixed(1), num13);//123.5,123.4567
/**
* Number.prototype.toLocaleString()
* toLocaleString() 方法返回这个数字在特定语言环境下的表示字符串。
* 新的 locales 和 options 参数让应用程序可以指定要进行格式转换的语言,并且定制函数的行为。
* 在旧的实现中,会忽略 locales 和 options 参数,使用的语言环境和返回的字符串的形式完全取决于实现方式。
*/
//numObj.toLocaleString([locales [, options]])
/**
* Number.prototype.toPrecision()
* toPrecision() 方法以指定的精度返回该数值对象的字符串表示。
* precision
* 可选。一个用来指定有效数个数的整数。
* 以定点表示法或指数表示法表示的一个数值对象的字符串表示,四舍五入到 precision 参数指定的显示数字位数。
* 查看 Number.prototype.toFixed() 方法关于四舍五入的讨论,同样应用于 toPrecision 方法。
* 如果忽略 precision 参数,则该方法表现类似于 Number.prototype.toString()。
* 如果该参数是一个非整数值,将会向下舍入到最接近的整数。
* => new number
*/
const num14 = 54.1234;
// console.log(num14.toPrecision(3), num14);//54.1,54.1234
/**
* Number.prototype.toString()
* toString() 方法返回指定 Number 对象的字符串表示形式。
* radix
* 指定要用于数字到字符串的转换的基数(从2到36)。如果未指定 radix 参数,则默认值为 10。
* => new string
*/
//numObj.toString([radix])
const num15 = 15;
// console.log(typeof num15.toString(),
// typeof num15, num15.toString(2));//string,number,1111
/**
* Number.prototype.valueOf()
* valueOf() 方法返回一个被 Number 对象包装的原始值。
* => number
*/
const num16 = 16;
// console.log(typeof num16.valueOf());//16
console