** 幂指数运算
**运算符的特点是右结合,而不是普通的运算公式是左结合。多个幂运算符连用时,是最右边开始计算的。
Math.pow(2,3) // 8
// better
2**3 //8
2**2**3 // 256 === 2**(2**3)
// 可以使用圆括号运算符()来控制表达式的优先级
(2**2)**3 // 64
?:条件(三元)运算符
if(age >= 18){
console.log('成年')
}else{
console.log('未成年')
}
// better
age>18?console.log('成年'):console.log('未成年')
条件运算符可以用链接使用,它也满足右结合
const age = 35
age >= 70 ? console.log('从心所欲')
: age >= 60 ? console.log('耳顺')
: age >= 50 ? console.log('知天命')
: age >= 40?console.log('不惑')
:age >= 30?console.log('立')
:console.log('啥也不是') //立
注意:condition如果不是一个boolean将会发生隐式转换,如果是一个真值Truthy,就会执行
let studyList = [{name:'vling',age:25},{name:'sara',age:24}]
let person = studyList.find(item=>item.age<18) //undefined
person ? console.log('要开花'):console.log('要种瓜') //要种瓜
,逗号运算符
逗号运算符可以创建一个以上的复合表达式,整个复合表达式的值为最右侧的表达式的值
x => {
x = x + 1
return x
}
// better
x => (x++, x)
// or
x => ++x
??空值合并运算符
空值合并运算符??当且仅当左侧操作数为null或者undefined时才会返回右侧操作结果。
空值合并运算符和 运算符 || 功能相似,也可以用来设置备用值,但如果值为假值时有隐患
function getAge(age){
age = age || '未知'
console.log('vling的年龄是:'+ age)
}
getAge(0) // 'vling的年龄是:未知'
逻辑或运算符 || 会在左侧操作数是falsy 时返回右侧操作数。而0,‘’也属于falsy,使用空置合并运算符??解决了这个问题。如
function getAge(age){
age = age ?? '未知'
console.log('vling的年龄是:'+ age)
}
getAge(0) // 'vling的年龄是:0'
可以和可选链运算符?.一起用
let person
person?.age?? '未注册' // '未注册'
?.可选链运算符
当读取到null或undefined的属性时,js会抛出typeError:
新增可选链运算符,可以作用在上述情况,并短路返回undefined:
let studentList = [{name:'vling'}]
if(studentList[0].sleep){
studentList[0].sleep()
}
// better
studentList[0].sleep?.() // undefined
//如果前面的对象也可能不存在
studentList[1].sleep?.() // undefined
//如果该属性虽然存在,但不是一个函数,就会报错
studentList[0]?.name()
//可用于方括号属性访问器和访问数组元素
let name = 'vling'
null?.[name] // undefined
let arr = []
arr?.[0] // undefined