比较陌生的运算符:

    • [delete](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/delete) obj.name:一般用于删除对象上的某个属性,而不是用于数组噢
    • ~a:按位非运算符,反转操作数的比特位,即0变成1,1变成0
    • a&b:按位与,只有两个操作数相应的比特位都是1时,结果才为1,否则为0
    • a|b:按位或,当两个操作数相应的比特位至少有一个1时,结果为1,否则为0
    • a^b:按位异或,当两个操作数相应的比特位有且只有一个1时,结果为1,否则为0
    • a<<b:左移,将 a 的二进制形式向左移 b (< 32) 比特位,右边用0填充
    • a>>b:有符号右移,将 a 的二进制表示向右移 b (< 32) 位,丢弃被移出的位
    • a>>>b:无符号右移,将 a 的二进制表示向右移 b (< 32) 位,丢弃被移出的位,并使用 0 在左侧填充
    • "name" in obj:如果指定的属性在指定的对象或其原型链中,则in 运算符返回true

    • const foo = null ?? 'default string':当左侧的操作数为 null 或者 undefined 时,返回其右侧操作数,否则返回左侧操作数。而使用||可能会有意外之外的行为,如左侧为””或0时会返回右侧;

    • a.speed??=25:相当于a.speed = a.speed ?? 25