Мне нужно проверить, равна ли строка определенному значению И если у объекта есть ключ hash.
Меня это очень смущает:
var my_string = 'some_string';
var my_obj = {'hash':'4010f89a05c236cd4f3a5c7558af0e70dc4216454d2d5155a285bfbad752ce51f9510272821a254'}
console.info((my_string == 'some_string' && my_obj['hash']));
Это возврат 4010f89a05c236cd4f3a5c7558af0e70dc4216454d2d5155a285bfbad752ce51f9510272821a254
Ожидается true или false (в этом примере ожидается true).
Бффф ... Мне нужно будет проверить весь мой проект :( ... как вы предлагаете решить эту проблему? (Мне нужно использовать много раз в таких условиях проекта mi)
Операторы возвращают фактические значения из левой или правой части операции. Они выполняют контрольная работа, переводя значения в логические, но они возвращают значения действительный.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Работает правильно.
(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 );
Больше информации здесь:
Операторы JavaScript
&&и||не обязательно дают в результате логическое значение.