← 返回目录

对象扩展 / 数值扩展

一、对象扩展

1. Object.is:更"较真"的比较

以前 · === 现在 · Object.is
console.log(NaN === NaN);  // false
console.log(0 === -0);     // true
console.log(Object.is(NaN, NaN));  // true
console.log(Object.is(0, -0));     // false

Object.is 比 === 更"较真":NaN 和 NaN 它认为相同,0 和 -0 它认为不同。平时用 === 就够,这两个特殊情况才用 Object.is。

2. Object.assign:合并对象

以前 · 一个个手动加 现在 · assign 一次合并
let target = { a: 1 };
target.b = 2;    // 只能一个个加
target.c = 3;
console.log(target);
// {a:1, b:2, c:3}
let target = { a: 1 };
Object.assign(target, { b: 2 }, { c: 3 });
console.log(target);
// {a:1, b:2, c:3}

Object.assign(目标, 源1, 源2...) 把后面对象的东西都"并"进前面,一次合并多个,常用于合并配置。

二、数值扩展

数字写法更方便(直接写二进制、八进制、十六进制),Number 上多了几个更严格的方法。

1. 新的进制写法

以前 现在
// 写进制要算来算去
console.log(31);
console.log(0b1010);   // 10(二进制)
console.log(0o17);     // 15(八进制)
console.log(0x1f);     // 31(十六进制)

2. Number 新方法

以前 · 全局方法(宽松) 现在 · Number 方法(严格)
console.log(isNaN("abc"));
// true(宽松:先偷偷转数字)
console.log(Math.pow(2, 10));
// 1024(幂运算写起来长)
console.log(Number.isNaN("abc"));
// false(严格:不转类型)
console.log(Number.isInteger(3.5));
// false(是不是整数)
console.log(Math.trunc(3.9));
// 3(直接砍掉小数)

Number.isNaN 比 isNaN 严格(不偷偷转类型),Math.trunc 直接砍掉小数部分,比 round / floor 更省心。

一句话:Object.is 更较真、assign 一键合并;数字有进制新写法、Number 方法更严格