Как написать код в операторе if на JavaScript?

#javascript

Вопрос:

Я хочу получить некоторые данные из API на некоторых условиях. Ниже приведен мой код:

 const readmsg = async (a) => {
        ((a.receiver === me) amp; (a.is_read === false)) ? 
            let data1 = new FormData()
            data1.append('is_read',true)
            await chatApi.post(`updateMsg/${a.id}/`,data1)
        : 
        null
        
    }
 

Но это дает мне синтаксические ошибки. Как я могу написать это правильно? Даже я попробовал if и else вместо оператора тернери, который не выдает синтаксическую ошибку, а выдает ошибку.

ошибка

Комментарии:

1. На изображении это выглядит так, как будто вы просто забыли фигурные скобки {} для if блока. Что в некотором роде просто сделало бы это опечаткой. (Код, показанный в вопросе, сильно отличается от того, что показывает ошибку на изображении…)

2. Попробуйте заключить код после ? и до : в скобки

3. троичный не имеет смысла, когда вам нужно выполнить несколько строк кода.

4. Тернарный оператор может использоваться только с выражениями, а не с операторами внутри него. Используйте обычное if утверждение.

5. Это определенно не стандартный вариант использования для тернарного оператора. если…иначе-это правильный путь.

Ответ №1:

Используйте обычное if утверждение.

 const readmsg = async (a) => {
    if (a.receiver === me amp;amp; !a.is_read) {
        let data1 = new FormData();
        data1.append('is_read','true');
        return await chatApi.post(`updateMsg/${a.id}/`,data1);
    } else {
        return null;
    }
};
 

Дополнительно:

  • Используется amp;amp; для объединения условий; amp; является битовым И.
  • Вторым аргументом FormData.append() должна быть строка или большой двоичный объект, а не логическое значение. Заключите true в кавычки, чтобы сделать его строкой.
  • Не используйте === при тестировании логических значений. Просто используйте значение или !value .

Комментарии:

1. Нет ничего плохого в использовании === при тестировании логических значений. Это может значительно упростить выполнение кода, а также сделать более явным, что вы тестируете логическое значение вместо того, чтобы просто искать истинность или ложность.

2. @MarkHanna Я думаю, что это личный стиль, но эксперты IME в основном предпочитают лаконичный стиль. Тестирование против false обычно выполняется только тогда, когда вам нужно отличить его от других ложных значений (например, PHP strpos()

3. Да, это единственный раз, когда использование === для проверки логических значений строго необходимо в функциональном смысле. Но, как вы сказали, на самом деле все сводится к предпочтительному стилю кода. Лично я нахожу, что это может облегчить выполнение кода, особенно для новых разработчиков.

4. @MarkHanna На мой взгляд, лаконичный синтаксис отражает то, как мы думаем и говорим. Вы говорите: «Марка нет дома», вы не говорите: «То, что Марка нет дома, — ложь».

5. Я думаю, что это зависит от человека, честно говоря. Другой способ прочитать эти два (предполагая, что переменная называется isMarkHome в качестве примера) будет «Не является ли Марк домом» против «Является ли Марк домом? Нет». Я знаю, что по крайней мере один мой опытный коллега предпочитает более многословную форму, потому что он считает, что она читается более естественно.