JavaScript 字符串与 & 运算符相等

JavaScript string eqaulity with & operator

const returnUrl =
(paymentType === 'order-pay-now' && 'orders/latest') ||
'my-account/overview'

让我困惑的是 paymentType === 'order-pay-now' && 'orders/latest'

它会首先检查 paymentType 是否等于 order-pay-now 并且 orders/latest 总是 return 为真。所以写 paymentType === 'order-pay-now' 达到同样的效果?

我不明白在这里使用 && 有何意义。这可能是一个应该使用 || 的错误吗?

所以 returnUrl 将是布尔值或字符串值 my-account/overview??

如果付款类型为 'order-pay-now',则将 "returnUrl" 设置为 'orders/latest',否则 returnUrl 设置为 'my-account/overview'

它利用了以下事实:条件运算符 return 他们需要在 JavaScript 中评估的最终条件的值,而不仅仅是真或假。 TBH,我不喜欢阅读这样的代码,并且认为人们在以这种方式编写时试图变得太聪明。

会更清楚:

const returnUrl = (paymentType === 'order-pay-now') ? 'orders/latest' : 'my-account/overview';

虽然有以这种方式使用条件的用例,例如如果您从具有不确定值的 Web 响应填充对象,并且想要设置空值的默认值,一个好的方法是:

myObj.prop = response.prop || 'default value';

这样你就可以用一种清晰易读的方式来表达 "set the object property to the response property OR the default"。

这就像三元运算符:

var paymentType = `order-pay-now`;

const returnURL = paymentType==='order-pay-now' ? 'orders/latest' :  'my-account/overview'
console.log(returnURL);


const second = ( paymentType==='order-pay-now' && 'orders/latest') ||  'my-account/overview'

console.log(second);