| 以前 · === | 现在 · 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。
| 以前 · 一个个手动加 | 现在 · 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 上多了几个更严格的方法。
| 以前 | 现在 |
|---|---|
// 写进制要算来算去 console.log(31); |
console.log(0b1010); // 10(二进制) console.log(0o17); // 15(八进制) console.log(0x1f); // 31(十六进制) |
| 以前 · 全局方法(宽松) | 现在 · 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 更省心。