我正在尝试使用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”
答案 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'
)