前端开发中有哪些鲜为人知的技巧？
??运算符是 ES2020 引入，也被称为null判断运算符( Nullish coalescing operator) 它的行为类似||，但是更严 ||运算符是左边是空字符串或false或0等falsy值，都会返回后侧的值。而??必须运算符左侧的值为null或undefined时，才会返回右侧的值。因此0||1的结果为1，0??1的结果为0 例如 浏览器支持情况 ?.也是ES2020 引入，有人称为链判断运算符（optional chaining operator） ?.直接在链式调用的时候判断，判断左侧的对象是否为null或undefined，如果是的，就不再往下运算，返回undefined，如果不是，则返回右侧的值 例如 注：常见写法 浏览器支持情况 我们可以使用 import 语句初始化的加载依赖项 但是静态引入的import 语句需要依赖于 type="module" 的script标签，而且有的时候我们希望可以根据条件来按需加载模块，比如以下场景： 这个时候我们就可以使用动态引入import()，它跟函数一样可以用于各种地方，返回的是一个 promise 基本使用如下两种形式 浏览器支持情况 其实上面的代码就有用到 顶层 await 允许开发者在 async 函数外部使用 await 字段 因此 浏览器支持情况 String.prototype.replaceAll()用法与String.prototype.replace()类似 但是replace仅替换第一次出现的子字符串，而replaceAll会替换所有 例如需要替换所有a为A： 浏览器支持情况 为什么使用 Proxy 替代 Object.defineProperty，简单总结Proxy的几点优势 使用也很简单，Proxy本质是构造函数，通过new即可产生对象，它接收两个参数： 例如响应式reactive的基本实现： 浏览器支持情况 Promise.any 接收一组Promise实例作为参数 写法推荐 或者 浏览器支持情况 ES2020[1] 引入了一种新的数据类型 BigInt，用来表示任意位数的整数 例如 除了使用BigInt来声明一个大整数，还可以使用数字后面加n的形式，如 需要了解BigInt数字操作时的支持情况，以免踩坑 浏览器支持情况 Array.prototype.at()接收一个正整数或者负整数作为参数，表示获取指定位置的成员 参数正数就表示顺数第几个，负数表示倒数第几个，这可以很方便的某个数组末尾的元素 例如 在类中通过哈希前缀#标记的字段都将被私有，子类实例将无法继承 例如 可以看到，属性privateField和方法privateMethod都被私有化了，在实例中无法获取到