Skip to content
☆´∀`☆
On this page

赶紧养成用 js 新特性的习惯

原文

使用"Object.hasOwn"替代“in”操作符

"in"会搜索原型链 **obj.hasOwnProperty **有在还没有对象时,会报错

javascript
Object.create(null).hasOwnProperty("name");
// Uncaught TypeError: Object.create(...).hasOwnProperty is not a function

可以用Object.hasOwn来解决上述两个问题。

javascript
let object = { age: 24 };
Object.hasOwn(object, "age"); // true
let object2 = Object.create({ age: 24 });
Object.hasOwn(object2, "age"); // false
let object3 = Object.create(null);
Object.hasOwn(object3, "age"); // false

使用"#"声明私有属性

#可以声明真正的私有属性啦!

javascript
class Person {
  #money = 1;
  constructor(name) {
    this.name = name;
  }
  get money() {
    return this.#money;
  }
  set money(money) {
    this.#money = money;
  }
  showMoney() {
    console.log(this.#money);
  }
}
const p1 = new Person("fatfish");
console.log(p1.money); // 1
// p1.#money = 2 // 没法从外部直接修改
p1.money = 2;
console.log(p1.money); // 2
console.log(p1.#money); // Uncaught SyntaxError: Private field '#money' must be declared in an enclosing class

使用“数字分隔符”

javascript
const sixBillion = 6000000000;
// ❌ 难以阅读
const sixBillion2 = 6000_000_000;
// ✅ 更加易于阅读
console.log(sixBillion2); // 6000000000
const sum = 1000 + 6000_000_000; // 6000001000

使用"BigInt"支持大数计算

JS 中超过“Number.MAX_SAFE_INTEGER”的数字计算将是不安全的。

javascript
Math.pow(2, 53) === Math.pow(2, 53) + 1; // true
// Math.pow(2, 53) => 9007199254740992
// Math.pow(2, 53) + 1 => 9007199254740992

// 使用BigInt
BigInt(Math.pow(2, 53)) === BigInt(Math.pow(2, 53)) + BigInt(1); // false

使用&&

test1 && callMethod();

短函数调用

javascript
const fun1 = () => console.log("fun1");
const fun2 = () => console.log("fun2");
// 长
let test = 1;
if (test == 1) {
  fun1();
} else {
  fun2();
}
// 短
(test === 1 ? fun1 : fun2)();