ES6 - 基础学习(5: 数值扩展

二进制和八进制数值表示法

  ES6提供了二进制和八进制数值的新写法,分别前缀 0b(0B)、 0o(0O)然后跟上二进制、八进制值即可。

  二进制(Binary)表示法新写法:前缀 0b 或 0B。

  let binary = 0b010101;        // 21
  let binary2 = 0B010111;       // 23

  八进制(Octal)表示法新写法:前缀 0o 或 0O。

  let octal = 0o123;        // 83
  let octal2 = 0O1234;         // 668

  从ES5开始,严格模式下,八进制数值就不再允许用前缀0表示,ES6则进一步明确规定,八进制数值用0o前缀表示。

  // 非严格模式
  (function () {
      console.log(0o01 === 001);
  })();
  // true

  // 严格模式
  (function () {
      'use strict';
      console.log(0o01 === 001);    // Octal literals with prefix '0' are not allowed. Use '0o' prefix instead
  })();
  // Uncaught SyntaxError: Octal literals are not allowed in strict mode.

数值的验证、判断、以及转换

  ES6不仅提供了很多新的数值处理方法,同时还将之前相对零散的全局处理方法都整理到了Number对象里面。 

  数值的验证:Number.isFinite()【用于检查一个数值是否为有限的( finite),即不是 Infinity】,Number.isNaN()【用于检查一个值是否为NaN】

  数值的判断:Number.isInteger()【用于判断一个数值是否为整数】,Number.isSafeInteger()【用于判断数值是否在安全范围内】

  数值的转换:Number.parseInt(),Number.parseFloat()

 数值的验证:ES6在Number对象内,新提供了 Number.isFinite()和 Number.isNaN()两个方法。

  1、Number.isFinite():用于检查一个数值是否为有限的(finite),即不是Infinity。同时Number.isFinite() 没有进行隐式的 Number() 类型转换,所有非数值都返回 false。所以Number.isFinite()还可以用来进行数字验证只要是数值,不论是整形还是浮点型都会返回 true非数值则一律返回 false

  console.log(Number.isFinite('testDemo'));        // false 字符串
  console.log(Number.isFinite(1992));              // true  整形数值
  console.log(Number.isFinite(0.5));               // true  浮点型
  console.log(Number.isFinite(true));              // false 布尔值
  console.log(Number.isFinite(null));              // false null
  console.log(Number.isFinite(undefined));         // false undefined
  console.log(Number.isFinite([1, 2, 3]));         // false 数组
  console.log(Number.isFinite({test: 'Demo'}));    // false 对象
  console.log(Number.isFinite(NaN));               // false NaN
  console.log(Number.isFinite(Infinity));          // false Infinity
  console.log(Number.isFinite(-Infinity));         // false -Infinity

  2、Number.isNaN():用于检查一个值是否为NaN。若参数类型不是NaNNumber.isNaN() 则一律返回false。而且 Number.isNaN() 也没有进行隐式的 Number() 类型转换。

  console.log(Number.isNaN('testDemo'));           // false
  console.log(Number.isNaN('testDemo'/0));         // true
  console.log(Number.isNaN('true'/'true'));        // true
  console.log(Number.isNaN(1992));                 // false
  console.log(Number.isNaN(1992/0));               // false
  console.log(Number.isNaN(0.5));                  // false
  console.log(Number.isNaN(true));                 // false
  console.log(Number.isNaN(true/0));               // false
  console.log(Number.isNaN(null));                 // false
  console.log(Number.isNaN(undefined));            // false
  console.log(Number.isNaN([1, 2, 3]));            // false
  console.log(Number.isNaN({test: 'Demo'}));       // false
  console.log(Number.isNaN(NaN));                  // true
  console.log(Number.isNaN(1992/NaN));             // true
  console.log(Number.isNaN(Infinity));             // false
  console.log(Number.isNaN(-Infinity));            // false

数值的判断:Number.isInteger()【用于判断一个数值是否为整数】,Number.isSafeInteger()【用于判断数值是否在安全范围内】

  1、Number.isInteger():用于判断一个数值是否为整数。如果参数不是数值,Number.isInteger()则返回false。

  console.log(Number.isInteger(0));                     // true
  // JavaScript内部,整数和浮点数采用同样的储存方法,因此 1 与 1.0 被视为相同的值
  console.log(Number.isInteger(1));                     // true
  console.log(Number.isInteger(1.0));                   // true

  console.log(Number.isInteger(1.1));                   // false
  console.log(Number.isInteger(Math.PI));               // false
  // NaN 和正负 Infinity 都不是整数
  console.log(Number.isInteger(NaN));                   // false
  console.log(Number.isInteger(Infinity));              // false
  console.log(Number.isInteger(-Infinity));             // false

  console.log(Number.isInteger("1992"));                // false
  console.log(Number.isInteger(true));                  // false
  console.log(Number.isInteger(false));                 // false
  console.log(Number.isInteger(null));                  // false
  console.log(Number.isInteger(undefined));             // false
  console.log(Number.isInteger([1,2,3]));               // false
  console.log(Number.isInteger({test: 'Demo'}));        // false

  // 数值的精度超过53个二进制位(1个隐藏位,52个有效位)时,由于第54位及后面的位被丢弃,JS会产生误判,此时就相当于在判定1.000000000000000,所以会返回true。
  console.log(Number.isInteger(1.0000000000000001));    // true  
  // 同理,当一个数值的绝对值小于Number.MIN_VALUE(5E-324),即小于JavaScript能够分辨的最小值,会被自动转为0,此时JS也会产生误判。
  console.log(Number.isInteger(5E-324));                // false  5E-324 还没超出最小值范围,所以isInteger()判定还是false。
  console.log(Number.isInteger(5E-325));                // true   5E-325 由于值太小,超出JS能够分辨的最小值范围,所以被自动转为0,因此isInteger()判定为true。

  总之,如果对数据的精度要求较高,在进行数据是否为整数进行判定时,不建议使用Number.isInteger()方法。 

  2、Number.isSafeInteger()用于判断数值是否在安全范围内

数值的转换:Number.parseInt(), Number.parseFloat()

你可能感兴趣的:(ES6 - 基础学习(5: 数值扩展)