JS 小技巧
关于 JS 的一些总结, 持续更新中……
1、用??代替||,用于判断运算符左侧的值为 null 或 undefined 时,才返回右侧的值
??运算符是 ES2020 引入,也被称为 null 判断运算符( Nullish coalescing operator)
它的行为类似||,但是更严
||运算符是左边是空字符串或 false 或 0 等 falsy 值,都会返回后侧的值。而??必须运算符左侧的值为 null 或 undefined 时,才会返回右侧的值。因此 0||1 的结果为 1,0??1 的结果为 0
const response = {
settings: {
nullValue: null,
height: 400,
animationDuration: 0,
headerText: "",
showSplashScreen: false,
},
};
const undefinedValue = response.settings.undefinedValue ?? "some other default"; // result: 'some other default'
const nullValue = response.settings.nullValue ?? "some other default"; // result: 'some other default'
const headerText = response.settings.headerText ?? "Hello, world!"; // result: ''
const animationDuration = response.settings.animationDuration ?? 300; // result: 0
const showSplashScreen = response.settings.showSplashScreen ?? true; // result: false
2、使用?.简化&&和三元运算符
?.也是 ES2020 引入,有人称为链判断运算符(optional chaining operator)
?.直接在链式调用的时候判断,判断左侧的对象是否为 null 或 undefined,如果是的,就不再往下运算,返回 undefined,如果不是,则返回右侧的值
let street = user.address && user.address.street;
let fooInput = myForm.querySelector("input[name=foo]");
let fooValue = fooInput ? fooInput.value : undefined;
// 简化
let street = user.address?.street;
let fooValue = myForm.querySelector("input[name=foo]")?.value;
注:常见写法
obj?.prop 对象属性
obj?.[expr] 对象属性
func?.(...args) 函数或对象方法的调用