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