无意中发现'??'这个运算符实在是太好用啦!
是对'||'的扩充,可以按需选择用'||'还是'??'
~(*^▽^*)~
(吐槽一下,竟然把??判为敏感词不让放标题...)
??符号会判断一个参数的值是否是已定义的(defined)
如果是,返回左边(它本身),如果不是,返回右边
a??b
let a;
alert(a ?? b ); //输出b,a未定义
我们可以用'??'来给未定义的变量提供一个默认值,当变量为null/undefined时返回这个变量值
let user;
alert(user ?? "匿名"); // 匿名(user 未定义)
let user = "John";
alert(user ?? "匿名"); // John(user 已定义)
??与||的区别主要在与他们对于值为0、""、false等的判断
|| 返回第一个 真 值
?? 返回第一个 已定义的 值
let height = 0;
alert(height || 100); // 100
alert(height ?? 100); // 0
??
运算符的优先级非常低,仅略高于?
和=
,因此在表达式中使用它时请考虑添加括号在与
||
或&&
一起使用时需要明确添加括号
let x = (1 && 2) ?? 3;
alert(x); // 2
let height = null;
let width = null;
let area = (height ?? 100) * (width ?? 50); // 重要:使用括号
alert(area); // 5000