黄子涵

第6章 数值的扩展

绩效

章节 代码量(行)
6.1 88

6.1 二进制和八进制表示法

ES6 提供了二进制和八进制数值的新写法,分别用前缀 0b(或 0B)和 0o(或0O)表示。

var hzh1 = 0b111110111;
var hzh2 = 503;
console.log("判断变量hzh1和hzh2是否严格相等:");
console.log(hzh1 === hzh2);
[Running] node "e:\HMV\Babel\hzh.js"
判断变量hzh1和hzh2是否严格相等:
true

[Done] exited with code=0 in 0.174 seconds

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

console.log("非严格模式判断数值是否严格相等:");
(function () {
    console.log(0o11 === 011);
})()
[Running] node "e:\HMV\Babel\hzh.js"
非严格模式判断数值是否严格相等:
true

[Done] exited with code=0 in 0.186 seconds
console.log("严格模式判断数值是否严格相等:");
(function () {
    'use strict'
    console.log(0o11 === 011);
})()
[Running] node "e:\HMV\Babel\hzh.js"
e:\HMV\Babel\hzh.js:4
    console.log(0o11 === 011);
                         ^^^

SyntaxError: Octal literals are not allowed in strict mode.
    at wrapSafe (internal/modules/cjs/loader.js:915:16)
    at Module._compile (internal/modules/cjs/loader.js:963:27)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
    at Module.load (internal/modules/cjs/loader.js:863:32)
    at Function.Module._load (internal/modules/cjs/loader.js:708:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12)
    at internal/main/run_main_module.js:17:47

[Done] exited with code=1 in 0.2 seconds

如果要将使用 0b 和 0x 前缀的字符串数值转为十进制数值,要使用 Number 方法。

console.log("字符串数值转为十进制数值:");
var hzh1 = Number('0b111');
var hzh2 = Number('0o10');
console.log(hzh1);
console.log(hzh2);
[Running] node "e:\HMV\Babel\hzh.js"
字符串数值转为十进制数值:
7
8

[Done] exited with code=0 in 0.2 seconds

6.2 Number.isFinite()、Number.isNaN()

ES6 在 Number 对象上新提供了 Number.isFinite()和 Number.isNaN()两个方法。

Number.isFinite()用来检查一个数值是否为有限的(finite)。

var hzh15 = Number.isFinite(15);
console.log("判断15是不是有限的?");
console.log(hzh15);
console.log("");
var hzh0_8 = Number.isFinite(0.8);
console.log("判断0.8是不是有限的?");
console.log(hzh0_8);
console.log("");
var hzhNaN = Number.isFinite(NaN);
console.log("判断NaN是不是有限的?");
console.log(hzhNaN);
console.log("");
var hzhInfinity = Number.isFinite(Infinity);
console.log('判断Infinity是不是有限的?');
console.log(hzhInfinity);
console.log("");
var hzh_Infinity = Number.isFinite(-Infinity);
console.log('判断-Infinity是不是有限的?');
console.log(hzh_Infinity);
console.log("");
var hzhHZH = Number.isFinite('HZH');
console.log("判断'HZH'是不是有限的?");
console.log(hzhHZH);
console.log("");
var hzh_15 = Number.isFinite('-15');
console.log("判断'15'是不是有限的?");
console.log(hzh_15);
console.log("");
var hzhTrue = Number.isFinite('true');
console.log("判断'true'是不是");
console.log(hzhTrue);
[Running] node "e:\HMV\Babel\hzh.js"
判断15是不是有限的?
true

判断0.8是不是有限的?
true

判断NaN是不是有限的?
false

判断Infinity是不是有限的?
false

判断-Infinity是不是有限的?
false

判断'HZH'是不是有限的?
false

判断'15'是不是有限的?
false

判断'true'是不是
false

[Done] exited with code=0 in 0.178 seconds

ES5 可以通过下面的代码部署 Number.isFinite 方法。

(function (global) {
    var global_isFinite = global;
    
    Object.defineProperty(Number, 'isFinite', {
        value: function isFinite(value) {
            return typeof value === 'number' && global_isFinite(value);
        },
        configurable: true,
        enumerate: true,
        writable: true,      
    });
}) (this);

Number.isNaN()用来检查一个值是否为NaN。

var hzhNaN = Number.isNaN(NaN);
console.log("判断NaN是不是NaN?");
console.log(hzhNaN);
console.log('');
var hzh15 = Number.isNaN(15);
console.log('判断15是不是15?');
console.log(hzh15);
console.log('');
var hzh_15 = Number.isNaN('15');
console.log("判断'15'是不是NaN?");
console.log(hzh_15); 
console.log('');
var hzhTrue = Number.isNaN(true);
console.log("判断true是不是NaN?");
console.log(hzhTrue);
console.log('');
var hzh9_NaN = Number.isNaN(9/NaN);
console.log("判断9/NaN是不是NAN?");
console.log(hzh9_NaN);
console.log('');
var hzhTrue_0 = Number.isNaN('true'/0);
console.log("判断'true'/0是不是NaN?");
console.log(hzhTrue_0);
console.log('');
var hzhTrue_True = Number.isNaN('true'/'true');
console.log("判断'true'/'true'是不是NaN?");
console.log(hzhTrue_True);
[Running] node "e:\HMV\Babel\hzh.js"
判断NaN是不是NaN?
true

判断15是不是15?
false

判断'15'是不是NaN?
false

判断true是不是NaN?
false

判断9/NaN是不是NAN?
true

判断'true'/0是不是NaN?
true

判断'true'/'true'是不是NaN?
true

[Done] exited with code=0 in 0.177 seconds

6.3 Number.parseInt()、Number.parseFloat()

6.4 Number.isInteger()

6.5 Number.EPSILON

6.6 安全整数和Number.isSafeInteger()

6.7 Math对象的扩展

6.7.1 Math.trunc()

6.7.2 Math.sign()

6.7.3 Math.cbrt()

6.7.4 Math.clz32()

6.7.5 Math.imul()

6.7.6 Math.fround()

6.7.7 Math.hypot()

6.7.8 对数方法

6.7.9 双曲函数方法

6.8 Math.signbit()

6.9 指数运算符

6.10 Integer数据类型

6.10.1 简介

6.10.2 运算

posted @ 2022-05-15 14:58  黄子涵  阅读(22)  评论(0编辑  收藏  举报