Столкнулся с таким нюансом, что if
и конструкция var== false/true
выдают разные результаты. Пожалуй, код продемонстрирует лучше слов:
if ({} && []) {
console.log(({} && []) == true); // сработает и выведет false
}
То есть выражение {} && []
в конструкции if
ведёт себя как true
. Но при явном применении оператора сравнения говорит, что это не так. И я нигде не могу найти объяснения, которое бы меня удовлетворило. Другой показательный пример:
var c = new Boolean(false);
if(c) {// == true - не сработает
console.log("8))))");
console.log(c==false);
}
На всех ресурсах, что я нашел, только вскользь в пяти словах упоминается о разном поведении, но никакого экскурса в причины.
Единственная нить с одного из них, за которую я зацепился - это valueof. Якобы при ==
происходит численное сравнение, а не логическое, а за преобразование самого объекта в число отвечает именно valueOf
. Но в описании самого valueOf
я не нашел никакой четкой информации, кроме как той, что если он не переопределен, то наследуется от Object
- но какая его реализация у Object
? Какие правила? Почему, например, [2] == false
, как []
, а [1] == true
?
Наткнулся так же на такую таблицу https://dorey.github.io/JavaScript-Equality-Table/ Она хоть и хороша, но похоже, составлена методом тыка и не даёт, ответа, что, почему и откуда берутся именно эти значения.
Логический оператор && возвращает правое значение, если левое истина, то есть оператор if некорректно сравнивать с (), которое возвращает полученный результат, в данном случае ({} && []) вернет пустой массив объект и сравнивать его с истиной тоже некорректно. Оператор if преобразует выражение к логическому типу и если выражение равно 0, пустой строке "", null, undefined и NaN, то результат становится false, иначе истина.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Как сделать загрузку теста сделанный в блокноте и чтобы принимался и вставал по своим местам?
Как получить числовое значение, записанное в input, с помощью его класса? Или значение можно получить только используя id?
У меня поверх карты OpenStreetMaps находится divИ когда карта перемещается мышкой, то она так же перемещается сквозь блок
У меня карта внизу страницы, но сильно ее тормозит на speed page это видно, как сделать так, чтобы при загрузке страницы карта не грузилась, а начинала...