#javascript
#javascript
Вопрос:
Есть ли более простой способ сделать это — JavaScript:
if (routine !== null amp;amp; routine.exercises !== undefined amp;amp; routine.exercises.length > 0) {
// Do Something
}
Например, в Dart я мог бы просто сделать это:
if (routine?.exercises?.length > 0 ?? 0) {
// DO Something
}
Что означает, что если значение routine равно null или routine.exercises равно null или routine.exercises.длина не больше 0, тогда просто примите 0 в качестве выражения
Комментарии:
1.
if (routine amp;amp; routine.exercises amp;amp; routine.exercises.length)
2.
if (routine amp;amp; routine.hasExercises())
… вот почему мы проводим рефакторинг.3. О, и babeljs.io/docs/en/babel-plugin-proposal-optional-chaining
Ответ №1:
Вы можете сделать
if (routine amp;amp; routine.exercises amp;amp; routine.exercises.length) ...
или короче, но может быть сложнее для чтения, используйте значения по умолчанию
if (((routine || {}).exercises || []).length) ...
Пример:
function test(routine) {
if (routine amp;amp; routine.exercises amp;amp; routine.exercises.length) {
console.log('passed with', JSON.stringify(routine));
}
if (((routine || {}).exercises || []).length) {
console.log('passed with', JSON.stringify(routine));
}
}
test({ exercises: [1] });
test({});
test(undefined);
Комментарии:
1. Хотя значения по умолчанию удобны, IMO они загромождены и их сложнее поддерживать / аргументировать.
2. @Dave Newton, я согласен, это может быть сложнее для чтения из-за круглых скобок и оператора or, но в то же время менее повторяющимся.
Ответ №2:
0
undefined
и null
все это ложные значения, вам не нужно сравнивать, просто поместите их напрямую.
if (routine amp;amp; routine.exercises amp;amp; routine.exercises.length) {
// Do Something
}