【问题标题】:Comparing multiple variables with logical operators for JavaScript将多个变量与 JavaScript 的逻辑运算符进行比较
【发布时间】:2018-10-17 22:28:07
【问题描述】:

我开始了 JavaScript 入门课程,我们正在学习逻辑运算符。我的脚本的目标是在满足几个条件时打印一条语句。

我有 3 个变量(例如 x、y、z),如果 x = a ||,我需要将其打印到控制台b AND y = c || d 和 z = e || f.

我的代码是:

var flavor = "strawberry";
var vessel = "cone";
var toppings = "cookies";


if (flavor === "vanilla" || "chocolate" && vessel === "cone" || "bowl" && toppings === "sprinkles" || "peanuts") {
   console.log("I'd like two scoops of " + flavor + "ice cream in a " + vessel + "with  " + toppings + ".");
} else {
	console.log("No ice cream for you.");
}

它需要有香草或巧克力 && 锥形或碗 && 洒或花生才能真实打印。使用我的代码,它会打印变量中的任何值,无论它们是什么。

我的代码有语法错误吗?或者你不能在一个陈述中比较那么多东西吗?正如我所说,这是一门入门课程,所以我无法想象开始会那么复杂。我的大脑中没有什么东西在燃烧。哈哈

任何帮助/解释将不胜感激。

提前致谢!!

【问题讨论】:

  • flavor === "vanilla" || "chocolate" -> flavor === "vanilla" || flavor === "chocolate" 并在其余情况下重复。您可能需要一个帮助函数来使您的代码更具可读性。
  • 仅供参考,真正发生的是if ((flavor === "vanilla") || (true && (vessel === "cone")) || (true && (toppings === "sprinkles")) || true),如您所见,它始终是true
  • 这一直持续到最后一次比较。无论我将浇头改成什么,它都会打印出声明。

标签: javascript logical-operators


【解决方案1】:

问题在于您如何使用 OR 条件。在 JS 中,当您使用不同于 undefinednull0""NaN 的对象时,条件返回 true

所以,你需要改变它。基本上,如果您需要对同一个变量进行多次比较,请执行以下操作:

var flavor = "strawberry";
var vessel = "cone";
var toppings = "cookies";

if ((flavor === "vanilla" || flavor === "chocolate") && (vessel === "cone" || vessel === "bowl") && (toppings === "sprinkles" || toppings === "peanuts")) {
  console.log("I'd like two scoops of " + flavor + "ice cream in a " + vessel + "with  " + toppings + ".");
} else {
  console.log("No ice cream for you.");
}

或者,您可以将数组与函数 includes 一起使用。

var flavor = "strawberry";
var vessel = "cone";
var toppings = "cookies";

if (["vanilla", "chocolate"].includes(flavor) && ["cone", "bowl"].includes(vessel) && ["sprinkles", "peanuts"].includes(toppings)) {
  console.log("I'd like two scoops of " + flavor + "ice cream in a " + vessel + "with  " + toppings + ".");
} else {
  console.log("No ice cream for you.");
}

【讨论】:

  • 也不要忘记列表中的""NaN,显然还有false
  • 我使用上面的格式更新了我的代码,并且 (( )) 引发了错误。我在每组参数周围使用了 [] 并且它有效......但无论最后一个变量是什么,它都会打印,即使它不是 = 变量。
  • 知道了!!一不小心吃多了!谢谢您的帮助。很高兴知道我可以在 () 中对每个比较进行分组并且它有效。
【解决方案2】:

有一些规则描述了如何将多重比较链接在一起。

这些规则称为precedence 规则,但使用额外的括号将比较分组在一起通常更容易,这样您就不必担心优先规则。这是带有正确括号的 if 语句:

if ((flavor === "vanilla" || flavor === "chocolate") && (vessel === "cone" || vessel === "bowl") && (toppings === "sprinkles" || toppings === "peanuts"))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 2018-05-29
    • 1970-01-01
    • 1970-01-01
    • 2017-07-29
    相关资源
    最近更新 更多