JavaScript If语句条件是否不带运算符?它有什么作用?
我习惯于使用条件为(xJavaScript If语句条件是否不带运算符?它有什么作用?,javascript,if-statement,conditional,Javascript,If Statement,Conditional,我习惯于使用条件为(x
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
只要括号内的表达式返回的不是
false
,null
,0
,“
或未定义的
。。。将执行if
语句中的块:-)
事实上,以下所有操作都会起作用:
<script>
if (3) {
alert('3');
}
if ({}) {
alert('{}');
}
if(window) {
alert('window!');
}
if(true) {
alert('true!');
}
if('hell yeah') {
alert('hell yeah!');
}
</script>
如果(3){
警报(“3”);
}
if({}){
警报({}');
}
如果(窗口){
警报(“窗口!”);
}
如果(真){
警惕(‘真’);
}
如果(‘是的’){
警惕(“该死的耶!”);
}
检查窗口中是否存在名为XMLHttpRequest
的属性,其“真实性”为true。Javascript将各种值解释为true:true、任何非0数值、任何非null对象引用或(我认为)任何非空字符串
在本例中,代码正在测试浏览器是否支持XMLHttpRequest属性,该属性是向上述浏览器中的服务器发送异步请求的对象的构造函数。如果浏览器定义此函数,If语句的计算结果将为true。在某些语言中,谓词必须返回布尔值。
在javascript中,情况并非如此
有些情况下,如0或false(可能还有其他情况)为false,其余为true这是因为JavaScript引擎在测试条件时强制将任何类型转换为布尔值。就好像你在做一样
// Coerce it to a boolean using !!
if (!!window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
}
有关规范,请参见此处:请参见。截至ECMAScript 2018,falsy值的完整列表为+0
,-0
,NaN
,false
,“
,null
,未定义的
和文档。全部。未来的ECMAScript版本可能会向列表中添加一个0n
。这种情况与此不同。OP的版本将转换为布尔值(真实性),并检查结果是否为真。您的版本将两个版本转换为数字,并检查数字是否不相等(window.XMLHttpRequest
变为NaN
,false
变为0
,NaN!=0
为真)。