JavaScript If语句无法正常运行

时间:2016-03-14 05:23:31

标签: javascript if-statement

下面是我的代码,它总是返回IF语句,好像它是假的。难道不是真的吗?

用IF语句指定的变量:

var coloredUI = '';
var coloredText = '';

以下是IF声明:

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

} else {

}

5 个答案:

答案 0 :(得分:4)

在JavaScript中,值可以是" truthy "或" falsy "。您将两个变量都设置为空字符串,这些字符串是" falsy" (没有字符== false)。其他虚假价值观是:

未定义 0 false null

if语句总是要测试truthy布尔结果的条件。如果给它一个表达式,那么表达式将被计算,而如果结果不是布尔值,则JavaScript引擎会将其强制转换为一个。假值变为假,真值变为真,所以:

 if(coloredText) {}

评估为:

 if(false) {}

因为coloredText被初始化为假值('')。而且因为你使用了短路的逻辑AND,所以两个表达式都必须为真,以使整个if成立。但是,由于第一个被强制为false,if语句将进入假分支。

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

 if(coloredText == '')  // true

隐式类型强制的概念也是 JavaScript提供两种相等性测试机制的原因。以此为例:

 var x = 0;
 if(x == false)

这将导致true,因为双等号表示与转化相等false转换为数字(0),然后根据数字0进行检查,因此我们得到true

但是这个:

 var x = 0;
 if(x === false)

会产生false结果,因为三等号表示严格相等,不会发生转换,并且两个值/表达式按原样进行比较。

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

 if(navigator.geolocation)

如果navigator对象没有geolocation属性,则表达式将评估为undefined(falsy),if将进入其false科。但是,如果浏览器确实支持地理定位,那么表达式将评估为对象引用(truthy),然后我们进入真正的分支。

答案 1 :(得分:2)

  

空字符串('')是falsey

以下示例将测试这两个值是否包含 truthy 值。



var coloredUI = '';
var coloredText = '';
if (coloredText && coloredUI) {
  alert('if');
} else {
  alert('else');
}




要将这两个值都测试为''



var coloredUI = '';
var coloredText = '';
if (coloredText == '' && coloredUI == '') {
  alert('if');
} else {
  alert('else');
}




Truthy and Falsy Values

答案 2 :(得分:1)

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

} else {

}

答案 3 :(得分:0)

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

} else {

}

答案 4 :(得分:-1)

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

} else {

}

如果你想检查有色文本中是否有值,请使用:

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

} else {

}