JavaScript逻辑运算符问题
JavaScript logical operators questions?
我就是不明白&&还有工作。我写了一个小代码来帮助自己,但它对我来说没有任何意义。你可以点击一个按钮,startGame()就会被调用。
var startGame = function() {
var quizAnswers = {
name: prompt("What is your name?").toUpperCase(),
age: prompt("What is your age?"),
snack: prompt("What is your favorite type of snack out of the following: ice cream, apple, chips, cookies?").toUpperCase()
};
quizAnswers.confirmAge = function () {
while (isNaN(this.age) === true) {
this.age = prompt("The age that you entered- " + this.age + " -is not a number. Please enter a number.");
};
};
quizAnswers.confirmAge();
quizAnswers.confirmSnack = function () {
while ((this.snack !== "ICE CREAM") && (this.snack !== "APPLE") && (this.snack !== "CHIPS") && (this.snack !== "COOKIES")) {
this.snack = prompt("The snack you entered- " + this.snack + " -is unrecognized. Please enter: ice cream, apple, chips, or cookies.").toUpperCase();
};
};
quizAnswers.confirmSnack();
它将获取姓名、年龄和最喜欢的零食,然后检查年龄是否为数字,输入的零食是否为列出的选项之一。在弄乱了confirmSnack函数中的while循环之后,我弄清楚了如何使其工作,如上图所示。但为什么呢?而不是||。有没有办法把它缩短,比如:
while (this.snack !== ("ICE CREAM" && "APPLE" && "CHIPS" && "COOKIES")) {
this.snack = prompt("The snack you entered- " + this.snack + " -is invalid. Please enter: ice cream, apple, chips, or cookies.").toUpperCase();
};
所以问题是解释为什么使用&&(and)而不是||(or),如果有一种方法可以缩短这个代码,这样我就不必输入"this"。零食!=="四次。我不是专家,所以请尽量保持简单。
<span;接线员工作正常。这实际上是一个逻辑问题,而不是javascript。>
当答案与所有可能的答案不同时,你在问这个问题。
可以用||重写如下:
while (!(this.snack == "ICE CREAM" || this.snack == "APPLE" || this.snack == "CHIPS" || this.snack == "COOKIES"))
注意开头的!
运算符
更简短的写法是:
answers = ["ICE CREAM", "APPLE", "CHIPS", "COOKIES"];
while (answers.indexOf(this.snack) < 0) { ... }
这里你定义了一个你想要接受的可能答案的列表,并检查这个答案是否在其中
&&
和||
运算符比较布尔值。(布尔值表示真/假)。这意味着如果执行5 == 5 && 6 + 1 == 7
,解释器将执行以下操作:
-
评估
5 == 5
。如果两边相等(你可能知道),==
运算符返回true。由于5 == 5
是true
,我们查看下一个值(如果它为假,由于短路运算符,它将立即返回假)。 -
评估
6 + 1 == 7
。这也是正确的,所以返回值是true
。
&&
运算符不比较常规值,如"ICE CREAM"
(它可以比较,但它将其转换为布尔值)。
现在让我们看一下您提供的代码:
this.snack !== ("ICE CREAM" && "APPLE" && "CHIPS" && "COOKIES")
首先,javascript解释器执行("ICE CREAM" && "APPLE" && "CHIPS" && "COOKIES")
。由于所有这些值都为真,因此该表达式的值为true
。所以这个比较本质上是检查this.snack !== true
,这不是你想要的。
为了解决你的问题,我建议使用indexOf
。它检查一个元素是否在数组中,如果没有元素则返回-1
。例如:
var validSnacks = ["ICE CREAM", "APPLE", "CHIPS", "COOKIES"];
while (validSnacks.indexOf(this.snack) === -1) {
// Do something
}
如果您使用or(||)
,如果任何子语句(例如:== "ICE CREAM")求值为true
,则整个语句为真,并显示提示符
另一方面,使用and(&&)
, 所有的子语句必须为真,整个语句才能被评估为真,这是你想要的行为-你只希望提示显示如果零食不是4个选项之一。
没有办法按照你建议的方式缩短代码。你可以做的一件事是创建一个包含4个选项的数组,并检查该数组是否包含snack.
- Javascript逻辑运算符和字符串/数字
- Javascript,如果条件在没有&&逻辑运算符当&&它不起作用
- 用于验证JS中逻辑运算符表达式的正则表达式
- 为什么在javascript函数声明中使用逻辑运算符
- 为什么这个while循环不能使用AND逻辑运算符
- 逻辑运算符混淆
- IF ELSEIF语句中的Java脚本逻辑运算符
- 为什么JavaScript中的逻辑运算符是关联的
- 布尔表达式-与AND、OR逻辑运算符混淆以及它们的工作方式
- Javascript 逻辑运算符:多个 ||语法困境
- 我可以在文档中放入逻辑运算符吗.querySelectorAll?如果是,如何
- 如何使用逻辑运算符 JavaScript 或 jQuery
- angularJS-使用逻辑运算符内联的多个过滤器
- 具有逻辑运算符的复杂三元运算符
- Javascript逻辑运算符||将0读取为假值.有什么好办法解决这个问题吗
- 闭包模板中的逻辑运算符
- Javascript 逻辑运算符
- JavaScript逻辑运算符问题
- JS中逻辑运算符的问题
- 逻辑运算符OR问题:jQuery