带&运算符的JavaScript字符串等效性

时间:2018-08-22 12:12:09

标签: javascript operators

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

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

请先检查paymentType是否等于order-pay-now,并且orders/latest将始终返回true。那么写paymentType === 'order-pay-now'可以达到同样的目的吗?

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

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

2 个答案:

答案 0 :(得分:6)

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

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

更清楚的是:

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

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

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

这样,您以一种清晰易读的方式说“将对象属性设置为响应属性或默认值”。

答案 1 :(得分:2)

这就像三元运算符:

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);