Javascript и оператор (&&) не работают должным образом

Мне нужно проверить, равна ли строка определенному значению И если у объекта есть ключ hash.

Меня это очень смущает:

var my_string = 'some_string';
var my_obj = {'hash':'4010f89a05c236cd4f3a5c7558af0e70dc4216454d2d5155a285bfbad752ce51f9510272821a254'}
console.info((my_string == 'some_string' && my_obj['hash']));

Это возврат 4010f89a05c236cd4f3a5c7558af0e70dc4216454d2d5155a285bfbad752ce51f9510272821a254

Ожидается true или false (в этом примере ожидается true).

Операторы JavaScript && и || не обязательно дают в результате логическое значение.

Pointy 30.03.2018 01:22

Бффф ... Мне нужно будет проверить весь мой проект :( ... как вы предлагаете решить эту проблему? (Мне нужно использовать много раз в таких условиях проекта mi)

MTK 30.03.2018 01:25

Операторы возвращают фактические значения из левой или правой части операции. Они выполняют контрольная работа, переводя значения в логические, но они возвращают значения действительный.

Pointy 30.03.2018 01:29
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
3
2 374
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

Работает правильно.

(my_string == 'some_string' && my_obj['hash']) равен "4010f89a05c236cd4f3a5c755...", что верно. Это прекрасно, например, для использования в качестве условия в операторе if.

Вы также можете преобразовать его в фактическое логическое значение:

!!(my_string == 'some_string' && my_obj['hash'])

Оператор && возвращает то, что находится справа от &&, если оба значения истинны, например:

const foo = 'foo';
const bar = 'bar';

const foobar = foo && bar;
console.info(foobar);

Этот возвращенный результат затем, в свою очередь, переводится в истинное или ложное значение в результате оператора if. Важно понимать, что оператор if переводит значение в логическое значение, а оператор && - нет.

Один из вариантов - использовать оператор in, чтобы проверить, существует ли конкретный ключ в объекте. Я предпочитаю этот метод, потому что в JavaScript есть действительно ужасные значения, которые считаются ложными, например 0.

console.info((my_string == 'some_string' && ('hash' in my_obj)));

&& не всегда возвращает логическое значение.

Когда вы используете && со строкой, он возвращает второе значение, если оба верны. Когда вы используете || со строкой он возвращает первое значение, если оба верны.

let one = "Cat" && "Dog"     
let zwo = "Cat" || "Apple"   

один возвращает Собаку. два возвращения кота

Вы можете использовать тернарная операция и заставить его возвращать истину или ложь.

Вот так:

console.info(   (my_string == 'some_string' && my_obj['hash'])   ? true : false );

Больше информации здесь:

Другие вопросы по теме