В современных браузерах вы можете использовать структуру данных Map
вместо объекта.
Объект Map может выполнять итерацию своих элементов в порядке ввода ...
в некоторых языках предикат действительно должен возвращать логическое значение. В javascript это не так.
Некоторые случаи, такие как 0 или ложные (могут быть другие), являются ложными, остальное - true
Пока выражение внутри круглых скобок возвращает что-то иное, кроме 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>
+0
, -0
, NaN
, false
, ""
, null
, undefined
и document.all
. Будущие выпуски ECMAScript могут добавить в список BigInt 0n
.
– Xufox
14 July 2018 в 07:00
Это связано с тем, что механизм JavaScript заставляет любой тип в логическом состоянии при тестировании условия. Как будто вы делали
// Coerce it to a boolean using !!
if (!!window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
}
window.XMLHttpRequest
становится NaN
, а false
становится 0
, NaN != 0
- true).
– doubleOrt
12 April 2018 в 18:00
Это проверяет, существует ли свойство на window
, называемом XMLHttpRequest
, чья «истинность» истинна. Javascript интерпретирует множество значений как истинных: true, любое число, отличное от 0, любую ненулевую ссылку на объект или (я думаю) любую непустую строку.
В этом случае код проверяя, поддерживает ли браузер свойство XMLHttpRequest, которое является функцией конструктора для объекта, который отправляет асинхронные запросы на сервер в вышеупомянутых браузерах. Если браузер определяет эту функцию, оператор if будет оценивать значение true.