【问题标题】:Can't assign value with ternary operator不能用三元运算符赋值
【发布时间】:2019-05-27 17:19:12
【问题描述】:

我需要根据从另一个var 获得的值为var 分配一个值,但它给了我未定义的值。

我需要根据您预订的提前天数给予折扣 例如

<input type="date" id="arriveDate">
<input type="submit" value="submit">

情况是我需要计算今天和arriveDate之间的天数。这没有问题(但欢迎任何评论)

在js中我是这样做的

var today = Date.now();
var arriveDateInserted = new Date(document.getElementById("arriveDate").value);

var diffDays = Math.round(((arriveDateInserted - today)/86400000)+1);

现在,我需要根据提前多少天进行预订来提供一些折扣。 我试过用三元运算符,像这样。

var discount = diffDays < 61 ? 0:
    diffDays > 60 && diffDays < 91 ? 0.10:
    diffDays > 90 && diffDays < 121 ? 0.15;

但我什至没有alert(discount)

任何帮助将不胜感激:)

【问题讨论】:

  • 你的最终三元组没有: &lt;else&gt; 来配合它。还要记住,很多人,包括我自己,都会建议你不要像这样链接三元组,因为它会降低可读性。编辑:鉴于你在让它工作时遇到问题,你似乎也有阅读它的问题。而你是编程它的人
  • 如果您一心想使用三元,建议至少将条件句括在括号中以提高可读性。
  • 我不知道三元组中的&lt;else&gt;。感谢 cmets,我会记住他们
  • 这是一个非常令人困惑的陈述,因为您正在使用三元组。
  • 我不是在“工作”,我正在探索。我在编码方面很菜鸟,尤其是在 javascript

标签: javascript html switch-statement


【解决方案1】:

检查您的控制台,您可能会遇到如下语法错误:

Uncaught SyntaxError: Unexpected token ;

您在后面的情况中缺少else

diffDays > 90 && diffDays < 121 ? 0.15 /* Here should be a : and an else condition

例子:

var discount = diffDays < 61 ? 0 :
    diffDays > 60 && diffDays < 91 ? 0.10 :
    diffDays > 90 && diffDays < 121 ? 0.15 : 0.20;

为了更好地阅读,我建议避免使用嵌套的三元条件:

let discount = 0;
if (diffDays > 60 && diffDays < 91) {
    discount = 0.10;
} else if (diffDays > 90) {
    discount = 0.15;
}

【讨论】:

  • 记住逻辑可以被简化。如果第一个 if 失败,则必须 > 60。与最后一个条件相同 > 90
  • @Taplar 同意。
猜你喜欢
  • 2013-06-28
  • 2012-02-14
  • 2011-07-02
  • 2021-04-29
  • 2021-11-23
  • 2015-04-06
  • 1970-01-01
  • 2017-07-16
  • 2015-08-24
相关资源
最近更新 更多