вывод на печать только в том случае, если в функцию передан реальный логический тип - PullRequest
0 голосов
/ 27 мая 2019

Что такое элегантный способ для функции отладки для печати, только если переданное значение является действительным логическим значением. Если в качестве второго параметра передается объект или строка, он НЕ должен печатать выходное сообщение. Если бы я мог избежать сравнения реального логического значения в функции отладки, это было бы для меня элегантным решением.

function debug(msg, enable) {
       this.msg = msg;
       if (Boolean(enable))
         console.log(this.msg);
}

debug("message", true) //should output message
debug("message", "random")// should not output the console message.

Ответы [ 3 ]

1 голос
/ 27 мая 2019

Вы можете проверить typeof enable

function debug(msg, enable) {
    this.msg = msg;
    if (typeof enable === 'boolean')
      console.log(this.msg);
}

debug("message", true) //should output message
debug("message", "random")

Если вы хотите показывать сообщение только тогда, когда enable является логическим и правдивым, вы можете расширить код выше

if (typeof enable === 'boolean' && enable)

function debug(msg, enable) {
    this.msg = msg;
    if (typeof enable === 'boolean' && enable)
      console.log(this.msg);
}

debug("message", true) //should output message
debug("message", "random")
debug("message", false)
1 голос
/ 27 мая 2019

Я не могу сказать из вопроса, хотите ли вы вывести сообщение, если enable - логическое значение (будь то true или false) (как я его первоначально читал) или только если это true ( так, как я прочитал его во второй раз) .

Если только для логических значений (true или false)

Если для true или false, то:

if (typeof enable === "boolean")
    console.log(this.msg);

или

if (enable === true || enable === false)
    console.log(this.msg);

или (но я думаю, что вы сказали, что вам не понравился этот):

if (Boolean(enable) === enable)
    console.log(this.msg);

Live Пример:

function debug(msg, enable) {
       this.msg = msg;
       if (enable === true)
         console.log(this.msg);
}

debug("one", true);      // prints
debug("two", "random");  // doesn't, it's not boolean, even though "random" is truthy

Если только для true

Если вы хотите напечатать сообщение только для true, просто используйте строгое равенство, поскольку вы хотите, чтобы false также не печатало сообщение:

if (enable === true)
    console.log(this.msg);

При === выражение будет ложным, если:

  • enable не является логическим значением (поскольку для === требуется соответствие типов операндов) или
  • enable равно false (потому что хотя типы совпадают, значения не совпадают)

Live Пример:

function debug(msg, enable) {
       this.msg = msg;
       if (enable === true)
         console.log(this.msg);
}

debug("one", true);       // prints
debug("two", false);      // doesn't, it's false
debug("three", "random"); // doesn't, it's not boolean, even though "random" is truthy
0 голосов
/ 27 мая 2019

Вы можете использовать ===.

function debug(msg, enable) {
    this.msg = msg;
    if (enable === true)
        console.log(this.msg);
}
...