He trabajado con jQuery a lo largo de los años. Sin embargo, recientemente, me he encontrado profundizando en el lenguaje JavaScript. Recientemente, escuché acerca de los valores de "verdad" y falsey. Sin embargo, no los entiendo completamente. Actualmente, tengo un código que se ve así:
var fields = options.fields || ['id', 'query'];
Necesito identificar si los campos son nulos, indefinidos o tienen una longitud de 0. Sé que el camino largo es hacerlo:
if ((fields === null) || (fields === undefined) || (fields.length === 0)) {
...
}
Mi pregunta es, ¿es lo mismo lo siguiente?
if (!fields) {
...
}
javascript
usuario687554
fuente
fuente
Respuestas:
En programación, la veracidad o falsedad es la calidad de esas expresiones booleanas que no se resuelven en un valor booleano real, pero que, sin embargo, se interpretan como un resultado booleano.
En el caso de C, cualquier expresión que se evalúe como cero se interpreta como falsa. En Javascript, la expresión
value
enevaluará a verdadero si
value
no es:Consulte también
¿Existe una función estándar para verificar variables nulas, indefinidas o en blanco en JavaScript?
fuente
El conjunto de valores de "veracidad" y "falsey" en JavaScript proviene de la
ToBoolean
operación abstracta definida en la especificación ECMAScript , que se utiliza al coaccionar un valor a un valor booleano:De esta tabla, podemos ver eso
null
yundefined
ambos son forzadosfalse
en un contexto booleano. Sin embargo,fields.length === 0
generalmente no se asigna a un valor falso. Sifields.length
es una cadena, entonces se tratará comofalse
(porque es una cadena de longitud cerofalse
), pero si es un objeto (incluida una matriz) se verá obligada a hacerlotrue
.Si
fields
debería ser una cadena, entonces!fields
es un predicado suficiente. Sifields
es una matriz, su mejor verificación podría ser:fuente
Respuesta corta:
No , no son lo mismo.
Pero esto:
if (!fields) { ... }
Es lo mismo que esto:
if ((fields === null) || (fields === undefined) || (fields === 0) || (fields === '') || (fields === NaN) || (fields === flase)) { ...
}
Respuesta larga (y mejor):
Primero hablemos de los valores de verdad y falsedad.
Se trata de lo que sucede cuando evalúas algo como booleano. En JavaScript, esto sucede cuando usa cosas como
if
declaraciones; operadores lógicos gusta||
,!
o&&
; o laBoolean()
función.La
Boolean()
función acepta un valor y devuelvetrue
ofalse
.Por ejemplo:
var age = 1; // Let's evaluate age as a boolean Boolean(age); // true
Siga adelante e intente esto en un nodo repl.
Un booleano solo puede ser
true
ofalse
, por lo que el valor de retorno deBoolean()
debe sertrue
ofalse
. En este caso, pasamos el valor1
, y cuando se evalúa como booleano,1
estrue
.Importante: cuando se evalúa como un valor booleano, un valor debe ser verdadero o falso. Esas son las únicas dos opciones.
En JavaScript, solo hay 6 valores falsos. Valores que serán
false
cuando se evalúen como booleanos. Ellos son:false
,0
,""
,null
,undefined
, yNaN
. Entonces, si alguno de estos valores se evalúa como booleano, serán falsos:Boolean(false) // false Boolean(0) // false Boolean("") // false Boolean(null) // false Boolean(undefined) // false Boolean(NaN) // false
Esto significa que cualquier otro valor, en JavaScript, se
true
evaluará como booleano. Por lo tanto, cualquier otro valor en JavaScript es verdadero.Otra manera fácil de evaluar algo como a
boolean
es usando el!
operador. Al igual que laBoolean
función, esto evalúa un valor como booleano. Pero los valores verdaderos se vuelvenfalse
y los valores falsos se vuelventrue
.!false // true !0 // true !"" / true !null // true !undefined // true !NaN // true
Nuevamente, intente esto en una respuesta de nodo o algo para asegurarse de que comprende.
Entonces esta declaración:
if (!fields) { ... }
Dice lo siguiente: "if
fields
, cuando se evalúa como booleano, es falso, entonces ejecuta el código dentro de esta instrucción if".En cuanto a su primera declaración:
var fields = options.fields || ['id', 'query'];
Está trabajando con el operador lógico OR, que vale la pena leer para asegurarse de que comprende. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators
fuente
Tu código significa:
Ahora
options.fields
se convierte en un valor booleano. Por definiciónnull
,undefined
,0
,""
se convierte enfalse
, (en su mayoría) todo lo demás se convierte entrue
(pero no quieren ser tan preciso).No significa lo mismo, porque la
fields.length === 0
línea. Las matrices vacías y otros objetos se convierten atrue
.nota: Javascript es a veces un gran desastre ... Por ejemplo, no hay una necesidad real de 2 operadores de verificación de tipos (typeof e instanceof). Simplemente confunde a ppl cuando
true instanceof Boolean
no funciona y su usotypeof(true) == "boolean"
es propenso a errores debido a que escribe una cadena sin autocompletar. Quizás en algunas versiones nuevas se resuelvan estos problemas.fuente
Puede probar (!! fields) si el elemento fields es nulo, indefinido o tiene una longitud de 0, devolvería verdadero. O (!!! campos) entonces esto devolvería verdadero.
el doble ! o !! forzará verdadero o falso. Desearía poder encontrar una buena definición para esto, pero parece que no puedo encontrarla nuevamente.
fuente