如何在三元语句中使用OR运算符

时间:2019-06-05 08:36:21

标签: javascript

我正在尝试使用OR以及使用三元运算符的if else条件来测试代码。如果不是,我可以使用normal来获得正确的结果,但是当我切换为使用三元运算符时。.我没有得到相同的结果。 有谁知道为什么OR不适用于三元运算符?

我尝试对if / else和三元运算符使用相同的OR代码... 三元不返回我期望的结果

var prodIdCond = excludedOffers.indexOf(prod_id) == -1;

//作品

if (String(offer.getValue('availability')) == 'in stock' || prodIdCond) { 
    console.log('active')
} else {
    console.log('paused')
}

//不起作用

(inStockCond || prodIdCond) ? console.log('active') : 
console.log('paused');

我希望在找不到prod_id时输出为“活动”。 但是当我使用三元运算符时,即使找到prod_id ..它也会返回“ active”

3 个答案:

答案 0 :(得分:1)

您的意图在这里还不是很清楚,

  

我希望在找不到prod_id时输出为“活动”。   即使找到prod_id,也要使用三元运算符。   “活跃”

您的初始if语句无法完成此任务。如果满足inStockCond,无论是否找到prod_id,它都将返回活动状态。

要确保找到prod_id时不返回活动值,必须使用逻辑&&运算符(这对谓词有其他影响,您必须相应地对其进行修复)。这样可以保证仅在未找到prod_id时才返回active。但也要满足inStockCond

(inStockCond && prodIdCond) ? console.log('active') : console.log('paused');

请注意,大多数语言中的执行单位是语句或表达式。表达式用于计算某些内容并返回一个值,而语句则用于执行不考虑返回值的指令。

表达这一点的“正确”方法是

console.log(inStockCond && prodIdCond ? 'active' : 'paused');

首先评估log中的三元表达式,并将返回值传递到console.log()语句。

但是javascript的魔力在于,即使没有返回值的方法也返回一个称为undefined的特殊值,允许您将console.log语句嵌套在表达式中。表达式和语句之间的界线有效地模糊了。

答案 1 :(得分:0)

尝试使用三元表达式生成消息,然后打印该消息:

var inStockCond = true;
var prodIdCond = false;
var msg = (inStockCond || prodIdCond) ? 'active' : 'paused';
console.log(msg);

这里的问题是三元表达式的谓词应该是文字值,而不是另一个表达式。

答案 2 :(得分:0)

您可以使用三元数获取日志记录的值。

console.log(offer.getValue('availability') === 'in stock' || !excludedOffers.includes(prod_id)
    ? 'active'
    : 'paused'
)