Более простой способ написать это: if (routine !== null

#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
}