Answers:
var startingNumber = startingNumber || 1;
类似于您要寻找的东西,如果未定义,它将在哪里默认?
var foo = bar || 1; // 1
var bar = 2;
foo = bar || 1; // 2
顺便说一下,这适用于很多场景,包括对象:
var foo = bar || {}; // secure an object is assigned when bar is absent
||
代替??
吗?
||
运算符不会返回true或false,它会返回第一个“真实的”值。假设你有val0
和val1
作为undefined
,并且val2
是2
,val3
是3
。 val0 || val1 || val2 || val3
将返回2
,因为它是第一个“真实”值。
||
将返回遇到的第一个真实值,因此可以用作合并运算符,类似于C#的 ??
startingNum = startingNum || 1;
就在这里:
var startingNum = startingNum || 1;
通常,expr1 || expr2
以以下方式工作(如文档所述):
返回
expr1
是否可以转换为true
; 否则,返回expr2
。因此,当与Boolean
值一起使用时,如果任一操作数为; ,则||
返回。如果两者都是,则返回。true
true
false
false
if a is truthy
vs 是不是更正确if a is evaluated to true
?
startingNum = startingNum || 1
如果您的条件为空,例如
startingNum = startingNum ? startingNum : null
您可以使用 '&&'
startingNum = startingNum && startingNum
anything && null
除非anything
是虚假的,否则不会评估为null 吗?
以上答案是正确的。在JavaScript中,以下语句:
startingNum = startingNum ? otherNum : 1
可以表示为
startingNum = otherNum || 1
此处未涉及的另一种情况是,如果您希望该值在不匹配时返回false。JavaScript的简写为:
startingNum = startingNum ? otherNum : 0
但是它可以表示为
startingNum = startingNum && otherNum
只是想涵盖其他情况,以防其他人正在寻找更笼统的答案。
x = innerWidth * 0.0375 > 24 ? innerWidth * 0.0375 : 24
???
innerWidth * 0.0375 > 24
与的if true
部分不同innerWidth * 0.0375
。仅当expression to be evaluated
和的if true
值相同时,才可以使用简写形式。同样,为什么您无法速记x = someBoolean ? 'Heck yea!' : 'No way!'
。
Math.max(innerWidth * 0.0375, 24)
Math.max
在您的用例中,它比三元运算符更好。
startingNum = startingNum ? otherNum : 1
可以表示为startingNum = otherNum || 1
”是错误的。我刚刚测试了这个
使三元像:
boolean_condition ? true_result : false_result
在javascript中,您可以执行以下操作:
(boolean_condition && true_result ) || false_result;
例:
(true && 'green') || 'red';
=> "green"
(false && 'green') || 'red';
=> "red"
x = innerWidth * 0.0375 > 24 ? innerWidth * 0.0375 : 24
会变成(innerWidth * 0.0375 > 24 && innerWidth * 0.0375) || 24
?? 有速记,所以我不必重复innerWidth * 0.0375
,除了将其分配给变量???
Math.max( innerWidth * 0.0375 , 24 )
可以正常工作。对于更一般的情况,最好创建一个称为“ somethingifiedInnerWidth”的描述性方法,该方法可以提高可读性,而不是创建变量。尽管在某些情况下,拥有一个(具有描述性名称的)变量会更容易理解,所以将来出现问题“为什么将它乘以这个?” 没有提出。
Math.max
。超级优雅的解决方案!!