JavaScript If 语句无法正常运行

JavaScript If statement not operating correctly

本文关键字:正常运行 语句 If JavaScript      更新时间:2023-09-26

下面是我的代码,它总是返回IF语句,就好像它是假的一样。不应该是真的吗?

使用 IF 语句断言的变量:

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

这是 IF 语句:

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

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

未定义0

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)

将导致false的结果,因为三重等号表示严格相等,其中不发生转换,并且按原样比较两个值/表达式。

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

 if(navigator.geolocation)

如果navigator对象没有 geolocation 属性,则表达式的计算结果将变为 undefined (falsy),并且if将进入其 false 分支。但是,如果浏览器确实支持地理位置,则表达式将计算为对象引用(真实),然后我们进入 true 分支。

空字符串( '' ) 是falsey

以下示例将测试两个值是否都包含真实值。

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

将这两个值作为''进行测试

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

真值和假值

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

或者,如果您想检查彩色文本中是否有值,请使用以下命令:

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