第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