Как определить свойство объекта на основе инструкции if / else?

#javascript #jquery #object #if-statement #datatables

#javascript #jquery #объект #if-оператор #таблицы данных

Вопрос:

Я пытаюсь настроить состояние кнопки с данными на основе инструкции if / else.

Объект datatable button:

     buttons: [
        {
            text: "button text",
            action: function (e, dt, node, config) {
                button_action();
            },
            enabled: function () {
                if (column_exists) {
                    this.enabled = true
                } else {
                    this.enabled = false
                }
            }
      }
    ]
  

С этим кодом моя кнопка всегда включена. Как я могу правильно установить enabled параметр на основе инструкции if / else?

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

1. Это полностью зависит от того, как вызывается enabled функция?

2. …и значение column_exists .

3. Попробуйте другое имя переменной, поскольку this.enabled заменит включенную функцию значением true. Если это то, что должно быть, используйте IIFE для возврата true или false изнутри функции.

4. каково значение column_exists

5. Для параметра enabled необходимо установить значение «true» или «false». Я просто не уверен, как я могу правильно установить этот параметр, используя инструкцию if / else. Правильно ли передается функция или я переопределяю параметр?

Ответ №1:

Вы хотите, чтобы enabled было верно, когда column_exists это true, и наоборот.

Итак…

 buttons: [
    {
        text: "button text",
        action: function (e, dt, node, config) {
            button_action();
        },
        enabled: !!column_exists
    }
]
  

!! Это чисто мера предосторожности. Он преобразует любое значение в логическое. Если column_exists уже было логическое значение, вам бы это не понадобилось.


При этом следующее является антипаттером.

 if (somethingBoolean) {
    someValue = true;
} else {
    someValue = false;
}
  

Не делайте этого. Вместо этого просто напишите:

 someValue = somethingBoolean;
  

или принудительно преобразовать любое значение в логическое с помощью двойного отрицания, как показано выше.

 someValue = !!anyValue;
  

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

1. На самом деле, column_exists — это не логическое значение, а объект. Итак, с !! это работает нормально.

2. Обратите внимание, что пустой объект {} соответствует действительности, поэтому !!{} выдает вам true . Вы можете хотеть этого, а можете и не хотеть, просто имейте это в виду.

3. Откуда вы знаете, что функция требует (e, dt, node, config)? Когда эта функция была определена? Я не понимаю, извините

Ответ №2:

Вы хотите создавать enabled не функцию, а логическое значение.

Для этого вы можете использовать IIFE:

 {
    enabled: (function () {
        if (column_exists) {
            return true
        } else {
            return false
        }
    }())
//   ^^
}
  

или просто не используйте операторы if-else, а используйте троичный оператор:

 {
    enabled: column_exists ? true : false
}
  

который в вашем случае также может быть упрощен до

 {
    enabled: Boolean(column_exists)
}
  

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

1. @Tomalak Упс. Спасибо, исправлено.