values truthy truly falsy javascript undefined boolean-operations

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"

http://jsfiddle.net/ueqo6yko

¿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