JavaScript Если условие оператора без оператора? Что оно делает? - PullRequest
15 голосов
/ 16 августа 2010

Я привык к операторам if, имеющим условие где (x

Спасибо.

if (window.XMLHttpRequest)
 {// code for IE7+, Firefox, Chrome, Opera, Safari
 xmlhttp=new XMLHttpRequest();
 }

Ответы [ 4 ]

14 голосов
/ 16 августа 2010

Пока выражение в скобках возвращает что-то отличное от false, null, 0, "" или undefined ... будет выполнен блок в операторе if:)

Фактически все следующее будет работать:

<script>
  if (3) {
    alert('3');
  }
  if ({}) {
    alert('{}');
  }
  if(window) {
    alert('window!');
  }
  if(true) {
    alert('true!');
  }
  if('hell yeah') {
    alert('hell yeah!');
  }

</script>
2 голосов
/ 19 марта 2011

Это потому, что движок JavaScript приводит любой тип к логическому при тестировании условия. Это как если бы вы делали

// Coerce it to a boolean using !!
if (!!window.XMLHttpRequest) {
   xmlhttp = new XMLHttpRequest();
}
1 голос
/ 16 августа 2010

Проверяет, существует ли свойство на window с именем XMLHttpRequest, чья "правдивость" является истинной.Javascript интерпретирует множество значений как истину: true, любое ненулевое числовое значение, любую ненулевую ссылку на объект или (я думаю) любую непустую строку.

В этом случае код тестируетсяподдерживает ли браузер свойство XMLHttpRequest, которое является функцией конструктора для объекта, который отправляет асинхронные запросы на сервер в вышеупомянутых браузерах.Если браузер определяет эту функцию, оператор if будет иметь значение true.

0 голосов
/ 16 августа 2010

в некоторых языках предикат действительно должен возвращать логическое значение.В javascript это не так.

В некоторых случаях, таких как 0 или false (могут быть и другие), значение false, остальное - true

...