Obtener valores de verdad de variables

En JavaScript, además de obtener los valores de verdad como resultado de una comparación o de asignarlos directamente, éstos se pueden obtener del valor que tenga una variable en un momento determinado.

Descripción Valor Conversión
Cero 0
Entero Positivo 50
Entero Negativo -50
Decimal Positivo 3.5
Decimal Negativo -3.5
Cadena de texto vacía »
Cadena de texto con contenido ‘texto’
Boolean – true true
Boolean – false false
Arreglo vacío []
Arreglo con contenido [1,2,3]
Objeto notación llaves {}
Objeto notación llaves c / atributo y valor {clave: «valor»}
Valor no definido undefined
Nulo null

Para obtener los valores de verdad anteriores se evaluó cada término (columna valor) utilizando dos exclamaciones (doble negación) !!.
La doble negación funciona de la siguiente manera:
Cambia el valor de verdad al valor contrario (como funciona la negación normalmente). Una vez que se tiene ese valor, se le cambia el valor de verdad nuevamente.
Esto se hace con la finalidad de obtener el valor de verdad original que contiene el término.

// Referencia 
// Cero
document.write(!!0) 
// Entero Positivo
document.write(!!50)
// Entero Negativo
document.write(!!-50) 
// Decimal Positivo
document.write(!!3.5) 
// Decimal Negativo
document.write(!!-3.5)
// Cadena de texto vacía
document.write(!!'')
// Cadena de texto con contenido
document.write(!!'texto')
// Valor de verdad - verdadero
document.write(!!true)
// Valor de verdad - falso
document.write(!!false)
// Arreglo vacío
document.write(!![]) 
// Arreglo con contenido
 document.write(!![1,2,3])
// Objeto - notación con llaves, sin atributos ni valores.
document.write(!!{})
// Objeto - notación con llaves con atributo y valor
document.write(!!{clave: "valor"}) 
// Valor no definido - undefined
document.write(!!undefined) 
// Nulo - null
document.write(!!null)
// Ejemplo 
// Evaluar los valores directamente en la ramificación  
if (1) { 
    console.log("Un número entero se toma como verdad") 
}

if ("hay algo escrito") { 
    console.log("Una cadena de texto se toma como verdadera") 
}

// Generalmente vamos a utilizar variables y no vamos a evaluar directamente 
// los valores en una ramificación.

// Asignando los valores a las variables

var mensaje 
mensaje = "hay algo escrito"

if (mensaje) {
  console.log("JS evalúa la variable con base en el contenido que tenga.")
  console.log("Como tiene una cadena de texto evalúa si tiene contenido.")
}

// Este tipo de expresiones se pueden interpretar como: 

//  Si es verdad el valor de la variable...

// Otro tipo de expresión es utilizar la negación seguida de una variable

var sin_definir

if (!sin_definir) {
  console.log( "La variable sin_definir fue evaluada como false ")
}

// Si la variable arroja un valor falso, la negación de este valor va a ser verdad. 
// Si es verdad que el valor de la variable es falso...