我正在互动网站上进行JavaScript练习,我真的需要一些帮助来理解这背后的逻辑......
练习要求您定义变量编程,并将其设置为false。
var programming = false;
然后,如果编程等于false,则函数happy
将返回true。
programming
已经设置为false,所以我的第一个想法就是写:
if (programming) {
// this
我犯了不使用的错误!运算符,这是他们要求的,所以我试着写:
if (!!programming) {
// this
对我而言,这说:not not false
我认为会取消并等于false
但是我收到以下错误:
哎呀,再试一次。当编程为真时,看起来你的快乐函数返回true而不是false
这有效:
if (!programming) {
// this
我只是不明白为什么(!编程)评估为false,当我相信这基本上是这样说:(!false)
请帮助我理解我的方式错误。谢谢。
作为参考,这是我的完整代码:
var programming = false;
var happy = function() {
if (!programming) {
return true;
} else {
return false;
};
};
编辑:
我找到了解决方案。 zystvan在这篇文章中解释了它:https://discuss.codecademy.com/t/why-is-this/42458
答案 0 :(得分:8)
我只是不明白为什么(!编程)评估为false,当我相信这基本上是这样说:(!false)
此语法:
if (!programming) {
}
基本上是简称:
if (programming != true) {
}
这是另一种写作方式:
if (programming == false) {
}
我认为不理解这是你混淆的根源。
另外请注意以下事项:
var programming = true;
programming; // true
!programming; // false
!!programming; // true
programming = false;
programming; // false
!programming; // true
!!programming; // false
所以你的程序可以缩短为:
var programming = false;
var happy = function() {
return !programming; // returns true when programming is false
};
答案 1 :(得分:1)
if (programming)
并不意味着“如果编程被设置为假”,那实际上恰恰相反!简单if
块的语法如下:
if (condition) { action }
它按以下方式执行:
if condition evaluates to true, then execute the action
练习要求您仅在编程为假时执行操作。 “编程是假的”是你的条件。你知道它现在是正确的,所以你也可以写if (true) { action }
或简单地action
,但你的练习可能会考虑这种作弊(通常条件不会那么明显)。
因此,当且仅当true
为假时,您需要生成一个评估为programming
的条件。您可以使用比较运算符==
或!=
,或运动提示的否定运算符!
。
答案 2 :(得分:1)
编辑:您刚刚发布的图片包含与您的问题中粘贴的代码不同的代码。您的问题已经使用!编程,但您的图像显示!!编程。将其更改为!编程(根据您的问题),它应该没问题。
我认为你的程序是正确的 - 你确定你正确执行了它并且你确定测试是正确的吗?
将代码粘贴到节点中会产生以下内容......
> var programming = false;
> var happy = function() {
... if (!programming) {
..... return true;
..... } else {
..... return false;
..... };
... };
> happy();
true
> programming = true; happy();
false
> programming = undefined; happy();
true
> programming = null; happy();
true
...所以当编程为真时,你的代码会返回false,这是期望的结果并且与测试结果相反?
哎呀,再试一次。当编程为真时,看起来你的快乐函数返回true而不是false
你可以将你的功能BTW缩短为:
var happy = function() { return !programming; }
最后要注意上面的评论
!programming
相当于
programming != true
如果编程具有非布尔值,则不一定如此!例如,考虑以下内容:
> programming = 5;
5
> !programming
false
> programming != true;
true
或更好
> var sad = function(value) { return (!value) === (value != true) }
> sad(undefined)
true
> sad(null)
true
> sad(false)
true
> sad(true)
true
> sad(1)
true
> sad(2)
false
> sad("")
true
> sad("A")
false
答案 3 :(得分:0)
使用时:
if (!someVariable) {
}
它说“如果someVariable的值不是真的(除了null,undefined或false之外的任何值”),那么执行这个“if”的主体。
所以,当你这样做时:
var someVariable = false;
if (!someVariable) {
//Since someVariable is not truthy, this will run
}
答案 4 :(得分:0)
var programming = false;
var happy = function() {
if (!programming) {
return true;
} else {
return false;
};
};
与
相同var programming = false;
var happy = function() {
if (programming != true) {
return true;
} else {
return false;
};
};
所以你有两个案例
答案 5 :(得分:0)
我认为你可能有更多的分号会导致执行时间冲突,所以如果函数没有正确执行,那么变量将设置为null,并且你得到一个False作为回报。
尝试删除第二个分号,如:
var programming = false;
var happy = function() {
if (!programming) {
return true;
} else {
return false;
}
};
答案 6 :(得分:0)
'true'或'false'有时甚至会让有经验的程序员感到困惑。
不要将'true'或'false'计算在内,而应将其视为“成功”和“失败”。表达式可以是“成功”或“失败”。
if(expression){
I'll be only executed when 'expression' is a success exp.
}
所以当你写
var programming = false;
if(programming){}
编程是一个失败表达式,所以“if”中的任何内容都会被执行。
答案 7 :(得分:0)
... if
语句执行以下代码块。
由于某些原因,您编写的所有内容都假设由于您的var为false
,因此它应该传递if
语句。我不知道你从哪里得到这个想法。
所以是的,编程为false的if (programming)
将不会执行后面的if语句中的代码。
同样地,你是正确的!!
只会将它翻转两次,回到它最初的任何布尔值(真实或虚假到真假)......它原来是{{1所以是的,if语句不会传递而不执行代码。
false
将!
值翻转为false
,这会使其通过true
语句。所以是的,如果你想要一个变量来传递if
语句,如果值为false,那么if
正是你要做的。它没有评估if (!programming)
...它正在评估false
,这就是它传递true
语句的原因。