#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
обычно выполняется только тогда, когда вам нужно отличить его от других ложных значений (например, PHPstrpos()
3. Да, это единственный раз, когда использование
===
для проверки логических значений строго необходимо в функциональном смысле. Но, как вы сказали, на самом деле все сводится к предпочтительному стилю кода. Лично я нахожу, что это может облегчить выполнение кода, особенно для новых разработчиков.4. @MarkHanna На мой взгляд, лаконичный синтаксис отражает то, как мы думаем и говорим. Вы говорите: «Марка нет дома», вы не говорите: «То, что Марка нет дома, — ложь».
5. Я думаю, что это зависит от человека, честно говоря. Другой способ прочитать эти два (предполагая, что переменная называется
isMarkHome
в качестве примера) будет «Не является ли Марк домом» против «Является ли Марк домом? Нет». Я знаю, что по крайней мере один мой опытный коллега предпочитает более многословную форму, потому что он считает, что она читается более естественно.