2022年JS新增小技巧

1. null判断运算符??

??类似于管道运算符||,但是表现上更为严格。

const a = 0 || 1; // 1
const b = 0 ?? 1; // 0

区别:
||运算符左边为假时(包括:null, undefined, ‘’, 0, false等),返回右边的值,否则返回左边的值
??运算符只有左边为null或者undefined时才返回右边的值,否则返回左边的值。
兼容性:

2. 链式判断运算符?.

const res = res.data ? res.data.list : []
const res = res.data && res.data.list

// 可简写成
const res = res.data?.list

?.直接在链式调用的时候判断,判断左侧的对象是否为null或undefined,如果是的,就不再往下运算,返回undefined,如果不是,则返回右侧的值

注:该运算符不仅可以用于对象,也可用于函数 如: func?.()

3. 顶层await

顶层 await 允许开发者在 async 函数外部使用 await 字段

(async function () {
  await Promise.resolve(console.log('🍭'))
})();
 
// 可简写成
await Promise.resolve(console.log('🍭'))

4. _分隔数字

typeof 1_000_000  // 'number'
1_000_000 === 1000000 // true

_操作符可分隔数字,增强可读性

5. BigInt

ES2020[1] 引入了一种新的数据类型 BigInt,用来表示任意位数的整数,支持大整数的计算问题

// 超过 53 个二进制位的数值(相当于 16 个十进制位),无法保持精度
Math.pow(2, 53) === Math.pow(2, 53) + 1 // true
 
// BigInt
BigInt(Math.pow(2, 53)) === BigInt(Math.pow(2, 53)) + BigInt(1) // false

除了使用BigInt来声明一个大整数,还可以使用数字后面加n的形式,如:

1234 // 普通整数
1234n // BigInt

6. Array.prototype.at()

Array.prototype.at()接收一个正整数或者负整数作为参数,表示获取指定位置的成员。
参数正数就表示顺数第几个,负数表示倒数第几个,这可以很方便的某个数组末尾的元素。

var arr = [1, 2, 3, 4, 5]

arr[arr.length - 1] //5
// 可简写成后
arr.at(-1) // 5

7.哈希前缀#

在类中可以通过哈希前缀#将字段私有,子类实例将无法继承

class Person {
    #money;
    #earnMoney() {
        return 'hello world';
    }
    constructor() {
        this.#money = 1000;
    }
}
 
const instance = new Person()
console.log(instance.money) //undefined
console.log(instance.earnMoney) //undefined

8. array.prototype.groupBy()

假设有一个员工列表,其中每个员工都是一个具有 2 个属性的对象:name 和 age。

const people = [
  { name: 'Alice', age: 21 },
  { name: 'Max', age: 20 },
  { name: 'Jane', age: 20 }
];

我们需要对其进行按 age 分类,最终实现输出结果如下:

const groupedPeople = {
  20: [
    { name: 'Max', age: 20 },
    { name: 'Jane', age: 20 }
  ],
  21: [
    { name: 'Alice', age: 21 }
  ]
}

之前的方法:借助array.reduce()

people.reduce((acc, obj) => {
    let key = obj.age
    if (!acc[key]) {
      acc[key] = []
    }
    acc[key].push(obj)
    return acc
  }, {})

可用groupBy简写成:

const groupedPeople = people.groupBy(({ age }) => age)
// {
//   20: [
//     { name: 'Max', age: 20 },
//     { name: 'Jane', age: 20 }
//   ],
//   21: [
//    { name: 'Alice', age: 21 }
//   ]
// }

groupBy也支持按条件自定义分类:

const groupedPeople = people.groupBy(({ age }) => age <= 20? 'a': 'b')
// {
//   'a': [
//     { name: 'Max', age: 20 },
//     { name: 'Jane', age: 20 }
//   ],
//   'b': [
//    { name: 'Alice', age: 21 }
//   ]
// }

9. toLocaleString(‘en-US’)

将数字每隔三位用逗号分割,常见价格

const value = 123456797
Number(value).toLocaleString('en-US')  //123,456,797
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值