JavaScript中变量前面追加‘+’

91 阅读1分钟

在项目代码中我们经常会遇到一种场景就是代码的优化写法导致自己一脸懵逼,例如以下两种常见形式:

+ 变量

+变量:这是规则转换,可以理解为Number(变量)

  • 对于boolean:true返回1,false放回0
  • 对于null:返回0
  • 对于undefined,放回NaN
  • 对于字符串,返回十进制,忽略前面的0,空字符串返回0

...对象/数组 <=> ...变量&&{...变量}

展开运算符常用于解构赋值 ...对象/...数组,还有一个常用的解构赋值的方式,例如查询接口的中不确定参数,比如某个状态只有在有值的情况下才会作为参数传递,常用的解决方式有三元表达式判断,还有一种兼容模式的写法就是 ...status && {status}

  • 这里考察点在于...&&,后者优先级高于前者
  • &&运算符返回后面为真的表达式结果,虽然常用于条件表达式中判断真假,但并不是一定要返回Boolean值,上述表达式中若为真则整体返回...{status},若status''或者undefined 则返回空
let response = await getMessageCountApi({
      ...status && {status},
      messageType: this.data.typeOptions[this.data.typeIndex].key,
      businessStatus: this.data.statusOptions[this.data.statusIndex].key
    })

运算符的优先级

从左到右算起

  1. ()圆括号的优先级最大
  2. 一元运算符 ++--( ++a 优先级小于 a++ )、 !+...-...
  3. 算术运算符 *(幂) 、 、 / 、 %(取余) 、 + 、 -
  4. 移位运算符 <<(按位左移)、>>(按位右移)、>>>(无符号右移)
  5. 比较运算符 <<=>>= ==!= ===!==
  6. 位运算符 & (按位与) 、^ (按位异或) 、| (按位或)
  7. 逻辑运算符 &&(逻辑与)、|| (逻辑或)
  8. 三元运算符
  9. 赋值运算符 =+=-= *=/=%=
  10. 展开运算符 ...