Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript If语句操作不正确_Javascript_If Statement - Fatal编程技术网

JavaScript If语句操作不正确

JavaScript If语句操作不正确,javascript,if-statement,Javascript,If Statement,下面是我的代码,它总是像返回false一样返回IF语句。这不是真的吗 与IF语句关联的变量: var coloredUI = ''; var coloredText = ''; if (coloredText && coloredUI == '') { } else { } 以下是IF声明: var coloredUI = ''; var coloredText = ''; if (coloredText && coloredUI == '') { }

下面是我的代码,它总是像返回false一样返回IF语句。这不是真的吗

与IF语句关联的变量:

var coloredUI = '';
var coloredText = '';
if (coloredText && coloredUI == '') {

} else {

}
以下是IF声明:

var coloredUI = '';
var coloredText = '';
if (coloredText && coloredUI == '') {

} else {

}
空字符串(
'
)是
假值

下面的示例将测试这两个值是否都包含truthy值

var coloredUI='';
var coloredText='';
if(coloredText&&coloredUI){
警报(“如果”);
}否则{
警报(“其他”);
}
或者,如果要检查coloredText中是否有值,请使用以下命令:

if ((coloredText) && (coloredUI == '')){

} else {

}

在JavaScript中,值可以是“truthy”或“falsy”。将两个变量都设置为空字符串,即“falsy”(无字符==false)。其他falsy值为:

未定义0falsenull

if
语句总是希望测试一个条件以获得真实的布尔结果。如果给它一个表达式,则会对该表达式求值,如果结果不是布尔值,JavaScript引擎会将其强制为一个。虚假的价值观变为虚假,真实的价值观变为真实,因此:

 if(coloredText) {}
评估结果为:

 if(false) {}
因为
coloredText
被初始化为错误值(“”)。因为您使用了短路逻辑And,所以要使整个
if
为真,这两个表达式都必须为真。但是,由于第一个被强制为false,因此
if
语句继续执行false分支

为了避免这种情况,您可以编写一个表达式来比较表达式,而不是单独强制表达式,如中所示:

 if(coloredText == '')  // true
隐式类型强制的概念也是JavaScript提供两种平等性测试机制的原因。以此为例:

 var x = 0;
 if(x == false)
这将导致
true
,因为双等号表示转换相等。将
false
转换为一个数字(
0
),然后对照该数字(
0
)进行检查,因此我们得到
true

但这是:

 var x = 0;
 if(x === false)
将导致
错误
结果,因为三重等号表示严格相等,不进行转换,两个值/表达式按原样进行比较

回到最初的情景在检查功能支持时,我们经常利用这种隐式类型强制。例如,较旧的浏览器不支持地理位置(它们不实现提供该功能的对象)。我们可以这样测试支持:

 if(navigator.geolocation)

如果
navigator
对象没有
geolocation
属性,表达式将计算为
undefined
(falsy),而
If
将进入其假分支。但是,如果浏览器确实支持地理定位,那么表达式将计算为对象引用(truthy),我们将进入真正的分支。

因为两个变量都是字符串,那么您应该测试每个字符串的内容-就像您对coloredUI变量所做的那样。@jeff,我没有注意到我无法像这样比较两个变量。非常感谢。@LeeTheCoder您实际上可以像以前那样比较值,但您需要了解这种语法将检查什么。请参阅下面我的答案,以获得关于何时这可能是您真正想要做的事情的完整解释。我感谢您花时间解释IF语句为什么会有这样的输出。真的很有用,谢谢!很乐意帮忙!;)祝你好运
if (coloredText == '' && coloredUI == '') {

} else {

}