学习目标:
js中强大的运算符
学习内容:
?? 非空运算符
注意:
?? 运算符被称为非空运算符。如果第一个参数不是 null/undefined 将返回第一个参数,否则返回第二个参数
之前:
给变量设置默认值时,常用|| 逻辑运算符,如果第一个参数不是假值就返回第一个参数,否则返回第二个参数
js中的假值:
’ '、0、false、NaN、null、undefined
demo:用户账户上可能有0元,如果用||,会将0视为假值,此时就有?? 的必要了
console.log( null ?? 6) // 6
console.log( undefined ?? 6) // 6
console.log( '' ?? 6) // ''
console.log( false ?? 6) //false
console.log( NaN ?? 6) // NaN
console.log( 0 ?? 6) // 0
?? = 空赋值运算符
注意: 这个运算符和?? 有着很深的联系
1、仅当值为 null 或 undefined 时,此赋值运算符才会赋值
2、其实是个语法糖,类似: a = a + b 写成 a += b
var x = null
var x1 = undefined
var x2 = ""
var x3 = NaN
var y = 5
console.log(x ??= y) // 5
console.log(x = (x ?? y)) // 5
console.log(x1 ??= y) // 5
console.log(x1 = (x ?? y)) // 5
console.log(x2 ??= y) // ''
console.log(x2 = (x2 ?? y)) // ''
console.log(x3 ??= y) // NaN
console.log(x3 ??= y) // NaN
console.log(x3 = (x3 ?? y)) // NaN
console.log(b = (3+1)) // 4
es6默认参数: 只有当undefined的时候才会使用默认值
function gameSettingsWithDefaultParams(gameSpeed=1, gameDiff='easy') {
return {gameSpeed, gameDiff}
}
let yt = gameSettingsWithDefaultParams(undefined, null)
console.log(yt) // { gameSpeed: 1, gameDiff: null }