一个简单的js片段。为什么总是提醒
'结果为空'
根据我的理解,if
阻止应该执行,因为result!=""
是true
并且警告
'结果不为空'。
<script>
var result = false;
if(result != "")
alert('result is not empty')
else
alert('result is empty')
</script>
答案 0 :(得分:2)
这是因为!=
进行了隐式类型转换。如果您使用严格版本!==
,它会按照您的预期执行。但是,松散版本!=
会将这两个操作数转换为数字,而""
和false
都转换为0
,因此"" != false
为false,因为它最终(通过一系列卷积)为0 != 0
。
这在规范中的Abstract Equality Comparison算法中有详细说明:
从上面我们可以看到,如果我们从false
和""
开始,那么:
false
转换为0
,然后重新开始0 != ""
""
转换为0
,然后重新开始0 != 0
false
(因为我们正在执行!=
,而算法是根据==
)定义的。答案 1 :(得分:1)
Javascript检查truthy值。
false != ""
是假的
false !== ""
是真的,所以你可以尝试一下。
答案 2 :(得分:1)
在javascript中,两个虚假的东西可以相等,就像在这种情况下,result != ""
产生false
。
您需要使用严格的比较,即!==
进行比较。 result !== ""
会产生true
。