Skip to content
On this page

数字

parseFloat

INFO

如果 parseFloat 在解析过程中遇到了 正号(+)、负号、数字(0-9)、小数点(.)、或者科学记数法中的指数(e 或 E)以外 的字符,则它会忽略该字符以及之后的所有字符,返回当前 已经解析 到的浮点数

TIP

如果参数字符串的第一个字符不能被解析成为数字,则 parseFloat/parseInt 返回 NaN

parseFloat 也可以转换一个已经定义了 toString 或者 valueOf 方法的对象,它返回的值和在调用该方法的结果上调用 parseFloat 值相同。

js
// 都是 3.14
parseFloat(3.14);
parseFloat('3.14');
// 忽略前后空白
parseFloat('  3.14  ');
parseFloat('314e-2');
parseFloat('0.0314E+2');
parseFloat('3.14some non-digit characters');
// 执行 toString / valueOf
parseFloat({ toString: function() { return "3.14" } });
js
parseFloat(""); // NAN
parseFloat(null); // NAN
parseFloat(undefined); // NAN
parseFloat("FF2"); // NaN

TIP

使用 Number(value) 进行更严谨的解析,只要参数带有无效字符就会被转换为 NaN 。

因为 typeof NaN == number, 所以,如果想判断一个对象是否是 数字,可以使用如下方式:

js
!Number.isNaN(parseFloat(123)) && Number.isFinite(123)

Number

js
Number(); // 0
Number(""); // 0
Number("12.PX"); // NaN
Number(null); // 0
Number(undefined); // NaN

trunc(truncate的简写)

Math.trunc 方法用于去除一个数的小数部分,返回整数部分。

js
console.log(~~-23.8); // -23;
console.log(~~23.8); // 23;

let x = Math.trunc(23.8);
console.log(x); // 23

let y = Math.trunc(-23.8);
console.log(y); // -23

Number.isNaN / isNaN

NaN 的由来

编码中很少直接使用到 NaN。通常都是在 计算失败 时,作为 Math 的某个方法的 返回值 出现的(例如:Math.sqrt(-1))或者尝试将一个字符串解析成数字但失败了的时候(例如:parseInt("blabla"))。

TIP

Number.isNaN 不会做转化,只有是 NaN的时候是 NaN,判断更加准确

js
Number.isNaN(NaN); // true
Number.isNaN(9 / NaN); // true
Number.isNaN("true" / 0); // true
Number.isNaN("true" / "true"); // true
Number.isNaN(NaN); // true
Number.isNaN(Number.NaN); // true
Number.isNaN(0 / 0); // true

// 只判断是 NaN,其他类型不管
Number.isNaN("NaN"); // false,字符串 "NaN" 不会被隐式转换成数字 NaN。
Number.isNaN({}); // false
Number.isNaN(true); // false
Number.isNaN(null); // false
Number.isNaN(undefined); // false
Number.isNaN("12px"); // false

TIP

isNaN 是需要做 Number 转化,然后判断转化后的结果是否是 NaN

js
isNaN(""); // 空字符串转成数字 0,不是 NaN
isNaN(null);//false 
// null 转成 0 
// null 是 指的是对象的空值,0 是指的是 数字的空值,所以 Number( null ) == 0,

isNaN(undefined); // Number(undefined) == NaN 是 true
isNaN("12px"); // Number(12px) == NaN true

🔗toLocaleString

toLocaleString() 方法返回这个数字在特定语言环境下的表示字符串

js
const number = 3500;

console.log(number.toLocaleString()); // 3,500

const number = 123456.789;
console.log(number.toLocaleString("zh-Hans-CN-u-nu-hanidec"));
// → 一二三,四五六.七八九

使用 🔗options

currency(货币)

js
const num = 123456;

//'CNY 123,456.00'
num.toLocaleString("zh", {
  style: "currency",
  currency: "CNY",
  currencyDisplay: "code",
});

// '123,456.000人民币'
num.toLocaleString("zh", {
  style: "currency",
  currency: "CNY",
  currencyDisplay: "name",
  minimumFractionDigits: 3,
});

// '¥123,456.000'
num.toLocaleString("zh", {
  style: "currency",
  currency: "CNY",
  minimumFractionDigits: 3,
});

(0.12).toLocaleString("zh", { style: "percent" }); // 12%