Путаница по поводу истинности и равенства пустых массивов с ложью
В JavaScript пустые массивы считаются правдивыми. Однако по сравнению с примитивным значением false они также оцениваются как false. Такое запутанное поведение можно объяснить неявным преобразованием типов, выполняемым операторами равенства.
Давайте подробнее рассмотрим предоставленный пример кода:
var arr = []; console.log('Array:', arr); if (arr) console.log("It's true!"); if (arr == false) console.log("It's false!"); if (arr && arr == false) console.log("...what??");
Первый оператор if проверяет, присутствует ли arr (поскольку это объект). Поскольку arr является объектом Array, он присутствует, и условие оценивается как true.
Однако второй оператор if сравнивает значение arr (после вызова toString()) с примитивным значением false. В JavaScript [] преобразуется в пустую строку ("") при вызове с помощью toString(), что считается ложным значением (наряду с нулевым, неопределенным, 0 и т. д.). Следовательно, условие также оценивается как ложное.
Третий оператор if объединяет два предыдущих условия с помощью оператора AND (&&). Поскольку и arr (теперь пустая строка), и arr == false (true и false) оцениваются как false, все условие оценивается как false.
В заключение, пустые массивы являются истинными в том смысле, что они считаются присутствует и оценивается как true при использовании в объектном или условном контекстах. Однако при сравнении с примитивным значением false они оцениваются как false из-за неявного преобразования типов, выполняемого операциями равенства.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3