JavaScript Number 数字对象-数据类型
大约 3 分钟约 929 字
JavaScript Number 数字对象-数据类型
let intNum = 55; // 整数
// 八进制字面量,第一个数字必须是零(0),然后是相应的八进制数字(数值0~7)
let octalNum1 = 070; // 八进制的56
let octalNum2 = 079; // 无效的八进制值,当成79 处理
let octalNum3 = 08; // 无效的八进制值,当成8 处理
// 十六进制字面量,必须让真正的数值前缀0x(区分大小写),然后是十六进制数字(0~9 以及A~F)
let hexNum1 = 0xa; // 十六进制10
let hexNum2 = 0x1f; // 十六进制31
- 浮点值
科学记数法的格式跟一个大写或小写的字母 e,再加上一个要乘的 10 的多少次幂,浮点值的精确度最高可达 17 位小数
let floatNum1 = 1.1;
let floatNum2 = 0.1;
let floatNum3 = 0.1; // 有效,但不推荐
let floatNum1 = 1; // 小数点后面没有数字,当成整数1 处理
let floatNum2 = 10.0; // 小数点后面是零,当成整数10 处理
let floatNum = 3.125e7; // 等于31250000
- 方法
var num = 10;
num.toString(); // '10'
num.toString(2); // 2 进制转换
num.toFixed(2); // 保留几位小数,最大 20 位小数
num.toExponential(1); // 1.0e+1 科学计数法
var num1 = 99;
num1.toPrecision(1); // 1e+2 向上舍入为 100
num1.toPrecision(2); // 99
num1.toPrecision(3); // 99.0
- NaN
分子是非 0 值,分母是有符号 0 或无符号 0,则会返回 Infinity 或-Infinity
console.log(0 / 0); // NaN
console.log(-0 / +0); // NaN
console.log(5 / 0); // Infinity
console.log(5 / -0); // -Infinity
isNaN 首先会调用对象的 valueOf() 方法,然后再确定返回的值是否可以转换为数值。如果不能,再调用 toString() 方法,并测试其返回值
Number.isFinite()
- 没有隐式的 Number() 类型转换,所有非数值都返回 false
- 检查一个数值是否为有限的( finite ),即不是 Infinity
Number.isFinite(1); // true
Number.isFinite(0.1); // true
Number.isFinite(NaN); // false 不是有限的
Number.isInteger()
- 判断一个数是不是整数
Number.isInteger(0); // true
// JavaScript 内部,整数和浮点数采用的是同样的储存方法,因此 1 与 1.0 被视为相同的值
Number.isInteger(1); // true
Number.isInteger(1.0); // true
数值转换
- null,返回 0。
- undefined,返回 NaN。
- 字符串:
- Number("1")返回 1,Number("123")返回 123,Number("011")返回 11
- 浮点数同样忽略前面的 0
- 16 进制转换为对应的 10 进制整数值
- 对象,调用 valueOf()方法,再执行上面的规则。如果是 NaN,则调用 toString()方法,再按照字符串的规则转换。
let num1 = Number('Hello world!'); // NaN
let num2 = Number(''); // 0
let num3 = Number('000011'); // 11
let num4 = Number(true); // 1
- parseInt()
- 字符串最前面的空格会被忽略
- 第一个字符不是数值、加号或减号,立即返回 NaN
let num1 = parseInt('1234blue'); // 1234
let num2 = parseInt(''); // NaN
let num3 = parseInt('0xA'); // 10,解释为十六进制整数
let num4 = parseInt(22.5); // 22
let num5 = parseInt('70'); // 70,解释为十进制值
let num6 = parseInt('0xf'); // 15,解释为十六进制整数
- parseInt()也接收第二个参数,指定进制数
let num = parseInt('0xAF', 16); // 175
// 提供了十六进制参数,那么字符串前面的"0x"可以省掉:
let num1 = parseInt('AF', 16); // 175
let num1 = parseInt('10', 2); // 2,按二进制解析
let num2 = parseInt('10', 8); // 8,按八进制解析
let num3 = parseInt('10', 10); // 10,按十进制解析
- parseFloat 解析到一个无效的浮点数值字符为止
- 始终忽略字符串开头的零
- 十六进制数值始终会返回 0,因为 parseFloat() 只解析十进制值
let num1 = parseFloat('1234blue'); // 1234,按整数解析
let num2 = parseFloat('0xA'); // 0
let num3 = parseFloat('22.5'); // 22.5
let num4 = parseFloat('22.34.5'); // 22.34
let num5 = parseFloat('0908.5'); // 908.5
let num6 = parseFloat('3.125e7'); // 31250000