侧边栏壁纸
  • 累计撰写 12 篇文章
  • 累计创建 6 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

ES6 相关特性

Administrator
2025-01-10 / 0 评论 / 0 点赞 / 15 阅读 / 3949 字
  1. 指数运算符

  2. 链判断运算符

    // 读取 firstName 需要层层调用获取,稳妥的方法是层层判断下,很麻烦
    let firstName = message.body.user.firstName
    ​
    const firstName = (message
      && message.body
      && message.body.user
      && message.body.user.firstName) || 'default';
    ​
    // es6 引入了“链判断运算符” ?. 简化了写法 ()
    // 链式调用的时候判断,左侧的对象是否为 null或undefined。如果是的,就不再往下运算,而是返回undefined
    const firstName = message?.body?.user?.firstName || 'default';

    注意点:

    • 短路机制

      • 本质上, ?. 运算符相当于一种短路机制,只要 ?. 左侧是 undefined || null, 那么右侧的表达式就不再运算

    • 括号的影响

      • 如果链有圆括号,链判断运算符只对括号内部有影响; (a?.b).c 可配合圆括号四则运算符理解

    • 链运算复 ?. 三种写法

      • obj?.prop // 对象属性是否存

      • obj?.[prop] // 同上

      • func?.(...args) // 函数或对象方法是否存在


      报错场合:

      // 构造函数
      new a?.()
      new a?.b()
      ​
      // 链判断运算符的右侧有模板字符串
      a?.`{b}`
      a?.b`{c}`
      ​
      // 链判断运算符的左侧是 super
      super?.()
      super?.foo
      ​
      // 链运算符用于赋值运算符左侧
      a?.b = c
      ​
      // 右侧不得为十进制数值  
      // (为了保证兼容以前的代码,允许foo?.3:0被解析成foo ? .3 : 0), 
      // 因此规定如果?.后面紧跟一个十进制数字,那么?.不再被看成是一个完整的运算符,而会按照三元运算符进行处理
      foo?.3:0

  3. null 判断运算符

    // 开发者的原意是,只要属性的值为null或undefined,默认值就会生效,但是属性的值如果为空字符串或false或0,默认值也会生效
    const headerText = response.settings.headerText || 'Hello, world!';
    ​
    // 只有运算符左侧的值为null或undefined时,才会返回右侧的值
    const headerText = response.settings.headerText ?? 'Hello, world!';
    ​
    // ?? 运算符可配合 ?. 一起使用,设置默认值
    const animationDuration = response.settings?.animationDuration ?? 300;
    ​

    注意点:

    • ?? 本质是逻辑运算, 它与 && 和 || 存在优先级,它们一起使用时,必须用括号表明优先级,否则报错

  4. 逻辑赋值运算符

    • ||=, &&=, ??=

      // 或赋值运算符
      x ||= y    
      // 等同于
      x || (x = y)
      ​
      // 与赋值运算符
      x &&= y
      // 等同于
      x && (x = y)
      ​
      // Null 赋值运算符
      x ??= y
      // 等同于
      x ?? (x = y)

      运用:

      • 它们的一个用途是,为变量或属性设置默认值。

      // 老的写法
      user.id = user.id || 1;
      ​
      // 新的写法
      user.id ||= 1;
    1. #!命令

5. 关于vsCode todo插件 配置 ☑️

// NOTE dndn
// INFO: 用来表达一些信息。
// TAG: 用来创建一些标记。
// TODO: todo 示例 (√)
// XXX: 用来标记一些草率实现的地方。在写代码的时候,有些地方需要频繁修改,这时候使用XXX标记。 (√)
// BUG: 用来标记BUG~ (√)
// FIXME: 用来标记一些需要修复的位置,可以快速定位。(√)

6. 待补充...

0

评论区