ES6新增功能强大的运算符详解!!!写项目事半功倍!!!力荐!!!

  1. 可选链操作符(?. )

这个操作符也可以用在数组上 比如 let arr =[ { x:[aaa] } ]   ==>  arr?.[0]?.x  

需要注意的是vue2 在template里面不能使用 可选链操作符, 但是vue3是可以的

  • 可选链操作符( ?. )允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。( ?. )

    引起错误,该表达式短路返回值是 undefined。与函数调用一起使用时,如果给定的函数不存在,则返回 undefined。
  • 当尝试访问可能不存在的对象属性时,可选链操作符将会使表达式更短、更简明。在探索一个对象的内容时,如果不能确定哪些属性必定存在,可选链操作符也是很有帮助的。
const test= {
  a1: 'Alice',
  a2: {
    b: 'Dinah'
  }
};
 
const res= test.a3?.b;
console.log(res);
// expected output: undefined
 
console.log(test.noExistMethod?.());
// expected output: undefined
a?.b
// 等同于
a == null ? undefined : a.b
a?.[x]
// 等同于
a == null ? undefined : a[x]
a?.b()
// 等同于
a == null ? undefined : a.b()
a?.()
// 等同于
a == null ? undefined : a()

举个栗子:

let week= {
  monday: {
    location: 'National Mall',
    budget: 200,
    host: null
  }
}
let res = week?.tuesday?.location ?? "locahost"; // => locahost
let res2 = week?.host; // => undefined

这个location是哪里来的呢?这个tuesday又是哪里来的呢?就算不是外面的week这个对象里也没有location和tuesday啊!!!

let res = week?.tuesday?.location; 
<=等价=> 
let res = week&& week.tuesday&& week.tuesday.location

注意: 作用就是判断这个对象(travelPlans)下的(tuesday)下的(location)是否为null或者undefined,当其中一链为null或者undefined时就返回undefined,这样即使中间缺少一个属性也不会报错,双问号后面接的就是默认值。

2. 三元运算符( ?: )

  • ?: :又叫条件运算符,接受三个运算数:条件 ? 条件为真时要执行的表达式 : 条件为假时要执行的表达式。实际效果:
function checkCharge(charge) {
    return (charge > 0) ? '可用' : '需充值' 
}
console.log(checkCharge(20)) // => 可用
console.log(checkCharge(0)) // => 需充值

3. 空值合并操作符(?? )

  • 空值合并操作符( ?? )是一个逻辑操作符,当左侧的操作数为 null 或者 undefined 时,返回其右侧操作数,否则返回左侧操作数。 空值合并操作符( ?? )与逻辑或操作符( || )不同,逻辑或操作符会在左侧操作数为假值时返回右侧操作数。

注意:只有当操作数为 null、undefined 这两个假值的时候才会使用预测的数据,但是 JS 中假值包含:未定义 undefined、空对象 null、数值 0、空数字 NaN、布尔false,空字符串'',一定要注意。

// 简单例子
null ?? 5 // => 5
3 ?? 5 // => 3
const nullValue = null;
const emptyText = ""; // 空字符串,是一个假值,Boolean("") === false
const someNumber = 42;
 
const valA = nullValue ?? "valA 的默认值";
const valB = emptyText ?? "valB 的默认值";
const valC = someNumber ?? 0;
 
console.log(valA); // "valA 的默认值"
console.log(valB); // ""(空字符串虽然是假值,但不是 null 或者 undefined)
console.log(valC); // 42

4. 空赋值运算符(??= )

  • ??= 也被称为空赋值运算符,与上面的非空运算符相关。看看它们之间的联系:
var x = null
var y = 5
console.log(x ??= y) // => 5
console.log(x = (x ?? y)) // => 5
​
let a = 0;
a ??= 1;
console.log(a); // 0
 
let b = null;
b ??= 1;
console.log(b); // 1
​
function gameSettingsWithNullish(options) {
  // 还可以多级别调用之后给定其为null的默认值
  options.gameSpeed ??= 1
  options.gameDiff ??= 'easy' 
  return options
}

仅当值为 null 或 undefined 时,此赋值运算符才会赋值。上面的例子强调了这个运算符本质上是空赋值的语法糖

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柑橘乌云_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值