下面是我的代码,它总是返回IF语句,好像它是假的。难道不是真的吗?
用IF语句指定的变量:
var coloredUI = '';
var coloredText = '';
以下是IF声明:
if (coloredText && coloredUI == '') {
} else {
}
答案 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');
}

答案 2 :(得分:1)
if (coloredText == '' && coloredUI == '') {
} else {
}
答案 3 :(得分:0)
if (coloredText == '' && coloredUI == '') {
} else {
}
答案 4 :(得分:-1)
if ((coloredText==='') && (coloredUI == '')){
} else {
}
如果你想检查有色文本中是否有值,请使用:
if ((coloredText) && (coloredUI == '')){
} else {
}