truthy - falsy values javascript
Doble canalización en JavaScript(||) lanza error en lugar de evaluar como falsy (5)
Para confirmar que undefined es falsy:
var whatever = undefined;
console.log(whatever || "undefined is really falsy");
Leí que el doble canal en JavaScript comprueba si una variable es falsy, y que undefined
es un valor falsy en JavaScript, por ejemplo
Significa que si el valor es falsey (por ejemplo, 0, "", nulo, no definido (ver también Todos los valores de falsey en JavaScript)), se tratará como falso; De lo contrario es tratado como verdadero.
Así que probé esto y descubrí que, de hecho, indefinido no se evalúa como falso, sino que produce un error:
let elemContent = document.getElementById(''content'');
let a = null;
let b = 2;
elemContent.innerHTML += a || ''ok''; // "ok"
elemContent.innerHTML += b || ''ok''; // "2"
elemContent.innerHTML += whatever || ''ok''; // "ERROR: whatever is not defined"
¿Es undefined
un valor falso en JavaScript o no, o cómo se entiende esta contradicción?
Porque en tu código, whatever
sea no solo no está undefined
sino que además no está declarado
Para evitar este error, puedes hacer lo siguiente:
let elemContent = document.getElementById(''content'');
let a = null;
let b = 2;
elemContent.innerHTML += a || ''ok''; // "ok"
elemContent.innerHTML += b || ''ok''; // "2"
elemContent.innerHTML += (typeof whatever !== ''undefined'' && whatever) || ''ok3''; // "ok3"
Undefined es de hecho falsa, pero es un error de JavaScript usar una variable antes de que se haya declarado.
Agregue un let whatever = undefined
algún lugar para ver el comportamiento que espera.
undefined
y error con not defined
son diferentes. undefined
es un valor para la variable declarada , cuando error con not defined
significa que su variable no está declarada.
Un ejemplo con undefined
:
let elemContent = document.getElementById(''content'');
let a = null;
let b = 2;
let whatever;
console.log(whatever)
elemContent.innerHTML += a || ''ok''; // "ok"
elemContent.innerHTML += b || ''ok''; // "2"
elemContent.innerHTML += whatever || ''ok''; // "whatever is undefined"
<div id="content"></div>
Un ejemplo con error not defined
:
let elemContent = document.getElementById(''content'');
let a = null;
let b = 2;
elemContent.innerHTML += a || ''ok''; // "ok"
elemContent.innerHTML += b || ''ok''; // "2"
elemContent.innerHTML += whatever || ''ok''; // "ERROR: whatever is not defined"
<div id="content"></div>
Y aquí hay un ejemplo, cómo puede verificar, hace la variable declarada y tiene un valor (no undefined
):
let test = "test";
if (typeof test !== undefined) {
console.log("''test'' is declared");
if(test) {
console.log("''test'' has a value (not ''null'', ''false'', ''undefined''...)");
}
}
let elemContent = document.getElementById(''content'');
let a = null;
let b = 2;
let c;
elemContent.innerHTML += a || ''ok''; // "ok"
elemContent.innerHTML += b || ''ok''; // "2"
elemContent.innerHTML += c || ''ko''; // "ko"
elemContent.innerHTML += whatever || ''ok''; // "ERROR: whatever is not defined"
c undefined
está undefined
. lo que sea undeclared