У вас когда-нибудь были трудные времена, чтобы проверить, является ли переменная пустой или нет, равна нулю или нет, есть ли вложенный объект или нет, является ли элемент внутри массива там пустым или нет. Что ж, тогда у нас похожая проблема, но не волнуйтесь, друг мой, у javascript есть дружественное решение для решения всех этих проблем, и решение будет …………. ДВОЙНОЙ ВОСКЛИЦАТЕЛЬНЫЙ ЗНАК!!

Двойной восклицательный знак (!!), используемый для проверки верности или ложности переменной, независимо от типа переменной, двойной восклицательный знак (!!)всегда возвращает Truthy or Falsy. Вот таблица истинности в javascript

Итак, если вы откроете журнал своего браузера и наберете это

Итак, позвольте мне объяснить, что двойной восклицательный знак работает, если мы напечатаем так:

var a = 1
console.log(!a) //-> false
console.log(!!a) // -> true

И в соответствии с таблицей истинности выше. 1 равно Истинно, поэтому первый восклицательный знак должен заставить значение стать отрицанием своего значения.. как противоположное его значению, но в логическом и всегда логическом !!!. Итак, согласно таблице, поскольку 1 является истиной, и мы ставим перед ним один восклицательный знак (!), а результат значение будет false, и мы должны поставить еще один восклицательный знак (!), чтобы снова отменить его, так что это будет правильное логическое значение, которое мы ожидали .

И это поразило меня.. вам даже не важно, какой тип какой-либо переменной, вы просто ссылаетесь на таблицу истинности в javascript, чтобы сделать Двойной восклицательный знак ( !!) работает как шарм, не нужно проверять пустую строку, нулевое значение или дочерний элемент в любом объекте, существует или нет, просто используйте двойной восклицательный знак (!!)

POC (сценарий из реальной жизни)

Итак, скажем, у вас есть функция для проверки того, есть ли какое-либо сообщение об ошибке, возвращаемое вашим сервером, и функция будет возвращать String.

function checkServerErrorMessage(res) {
  // do server checking returning string if server throwing error
  // default would be returning empty String
}
let errorMsg = ''
errorMsg = checkServerErrorMessage(res) //whatever you have checking function procedure, return a string if server returning error message
if (!!errorMsg) {
  //there is an error message thrown by server, alert user
} else {
  //no error thrown, do something...
}

Итак, вы заметили условие в еслимы используем проверку с двойным восклицательным знаком (!!),checkServerErrorMessageпроверит, возвращает ли какое-либо сообщение об ошибке сервер , если есть ошибка (True), вернуть сообщение об ошибке из нее, если нет, то вернуть пустую строку (False).

Избегайте двойного восклицательного знака

Вы хотите избежать использования двойного восклицательного знака, чтобы проверить, является ли объект пустым объектом и является ли массив пустым массивом.

var obj = {
  name: {},
  age: 21
}
var arr = []
console.log(!!obj.name) // -> DONT DO THIS, THIS WILL RETURN TRUE
console.log(!!arr) // -> DONT DO THIS, THIS WILL RETURN TRUE
console.log(!!obj.age) // -> ok to do this, since this isn't object
console.log(!!obj.weight) // -> ok to do this, will return false
//instead do this, for object, use lodash function 'isEmpty'
console.log(isEmpty(obj.name)) // -> return true if object empty.. Vise Versa
//array
console.log(!!arr.length) // -> return false because array is empty

Всегда имейте в виду, не отмечайте пустой объект и пустой массив двойным восклицательным знаком.