Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript If语句条件是否不带运算符?它有什么作用?_Javascript_If Statement_Conditional - Fatal编程技术网

JavaScript If语句条件是否不带运算符?它有什么作用?

JavaScript If语句条件是否不带运算符?它有什么作用?,javascript,if-statement,conditional,Javascript,If Statement,Conditional,我习惯于使用条件为(x

我习惯于使用条件为(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
为真)。