Number

Number对象是javascript的基本对象之一,它继承自Object

Number的使用姿势

  1. 使用new Number(1),创建一个Number对象
  2. 使用Number(1),会将参数转化为原始数值
//使用new Number()产生的数值,===比较时会有意外结果
var num1 = new Number(1);
var num2 = Number(1);
var num3 = Number(1);
num1 == num2;   //true
num1 === num2;  //false
num2 === num3;  //true
num1 == 1;      //true
num1 === 1;     //false
num2 == 1;      //true
num2 === 1;     //true

Number属性

  1. constructor 构造函数的引用
  2. MAX_VALUE 可表示的最大的数
  3. MIN_VALUE 可表示的最小的数
  4. NaN 非数值
  5. NEGATIVE_INFINITY 负无穷
  6. POSITIVE_INFINITY 正无穷

Number 方法

  1. toString() 把数字转化为字符串,参数是2,8,10,16对应相应的进制
  2. toFixed() 把数字转换为字符串,结果的小数点后有指定位数的数字。警告:这个函数不稳定,比如(1.45).toFixed(1)=1.4 (1.46).toFixed(1)=1.5 如果需要四舍五入请用Math.round
  3. toExponential(num) 转化为指数表现形式,num是0~20的值

    (1000).toExponential(2)=1.00e+3
  4. toPrecision(num) num是1~21的数值,对象的值超出指定位数时将其转换为指数计数法。和toExponential不同,只有在超过制定位数后才转变为指数

    (1000).toPrecision(3)=1.00e+3
    (1000). toPrecision(4)=1000
  5. valueOf() 返回对象的基本数值


es6新增属性

  1. MAX_SAFE_INTEGER 能代表的最大整数值2^53 - 1= 9007199254740991。原因是Javascript的整数是使用双进度浮点数,超过这个值会使比较产生不正常的值,比如说Number.MAXSAFEINTEGER + 1 === Number.MAXSAFEINTEGER + 2结果是true
  2. EPSILON 一个极小的浮点数,浮点数计算是不准确的,可以认为如果误差比这个还小就可以认为结果是正确

es6新增方法

  1. isSafeInteger() 判断是否是安全数值,是返回true

  2. parsetInt() 和全局的parsetInt 一样 转化为整数'parseInt('1x')=1

  3. parseFloat() 和全局的parseFloat 一样 转化为浮点数parseFloat('1.1x')=1.1

  4. isFinite() 是否非无穷

    var n1 = Number.isFinite(15); // true
    var n2 = Number.isFinite(0.8); // true
    var n3 = Number.isFinite(NaN); // false
    var n4 = Number.isFinite(Infinity); // false
    var n5 = Number.isFinite(-Infinity); // false
    var n6 = Number.isFinite('foo'); // false
    var n7 = Number.isFinite('15'); // false
    var n8 = Number.isFinite(true); // false
  5. isNaN() 检查一个值是否为NaN

    var f1 = Number.isNaN(NaN) // true
    var f2 = Number.isNaN(15) // false
    var f3 = Number.isNaN('15') // false
    var f4 = Number.isNaN(true) // false
    var f5 = Number.isNaN(9/NaN) // true
    var f6 = Number.isNaN('true'/0) // true
    var f7 = Number.isNaN('true'/'true') // true
  6. 它们与传统的全局方法isFinite()和isNaN()的区别在于,传统方法先调用Number()将非数值的值转为数值,再进行判断,而这两个新方法只对数值有效,非数值一律返回false;

    isFinite(25) // true
    isFinite("25") // true
    Number.isFinite(25) // true
    Number.isFinite("25") // false
    
    isNaN(NaN) // true
    isNaN("NaN") // true
    Number.isNaN(NaN) // true
    Number.isNaN("NaN") // false
  7. 新增了二进制和八进制写法,前缀为0b0o

    0b111 === 7 // true;
    0o767 ===503 // true;