[Pregunta]: ¿Qué significa esto (javascript)

Iniciado por Leguim, 1 Enero 2020, 03:20 AM

0 Miembros y 1 Visitante están viendo este tema.

Leguim

Código (javascript) [Seleccionar]

value = value == undefined ? '' : value;

AlbertoBSD

#1
Operador Ternario

Valor es igual a la evaluación boleana de value == undefined, si es verdadero te devuelve la cadena vacia '', si no lo es te devuelve el valor orginal.

Es para que value siempre tenga un valor valido, valga la redundancia.

imagina el siguiente ejemplo:

largest = ((a > b) ? a : b);
Se evalua si "a" es mayor que "b", Si es verdadero largest se iguala a la variable "a", si no se igual a la variable "b"

basicamente siempre es el mismo formato

variable = (condición) ? (valor si verdadero) : (valor si falso) ;

Saludos!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

#!drvy

Es un operador ternario.

https://es.wikipedia.org/wiki/Operador_ternario

Básicamente esta haciendo esto:

Código (javascript) [Seleccionar]
if (value == undefined) {
   value = '';
} else {
   value = value;
}



Este en concreto creo que tiene 0 sentido porque se repite mucho pudiendo hacer:

Código (javascript) [Seleccionar]
value = value || '';

https://es.wikipedia.org/wiki/Evaluaci%C3%B3n_de_cortocircuito

Saludos

@XSStringManolo

#3
Cita de: #!drvy en  1 Enero 2020, 03:24 AM
Es un operador ternario.

https://es.wikipedia.org/wiki/Operador_ternario

Básicamente esta haciendo esto:

Código (javascript) [Seleccionar]
if (value == undefined) {
   value = '';
} else {
   value = value;
}



Este en concreto creo que tiene 0 sentido porque se repite mucho pudiendo hacer:

Código (javascript) [Seleccionar]
value = value || '';

https://es.wikipedia.org/wiki/Evaluaci%C3%B3n_de_cortocircuito

Saludos
No es lo mismo drvy. Puede que a value se le asignara false de valor, 0 o null. Todos ellos equivalen a evaluación negativa y con tu código cambiarías su valor de value 1-1 a ''

Lo que trata el código es de comprobar si un valor se definió. Que por cierto, tampoco es correcto el código. Le falta un = porque se hace conversión de tipos.

value = "undefined" no es lo mismo que value = undefined;
En cambio en ese código de ejemplo se convierten para comparar.

Tampoco es muy eficiente. Para que reasignar un valor si ya lo tiene? Qué pasa si value es un objeto enorme del que depende todo el programa?

value === undefined ? value=0 : 0 ;

Si value contiene el dato primitivo undefined ? asígnale un valor; en caso contrario no hace nada.

En este caso casi que es mejor usar un if:
if (value === undefined) value = 0;

Se entiende mejor, menos código y más eficiente.

Ojo, no sabemos que es value, puedeser un método o una función entre otras cosas. Cundo haces un return de nada dentro de una función o método, se retorna undefined. Asique podría utilizarse para comprobar si por ejemplo una función recibió argumentos/parámetros.

Código (javascript) [Seleccionar]
function ej()
{
if (arguments.length === 0)
return;

else
{
arguments[0] ...
/*trabajar con argumentos*/
}
}

var value = ej();

value = ej("hola");

#!drvy

CitarNo es lo mismo drvy. Puede que a value se le asignara false de valor, 0 o null. Todos ellos equivalen a evaluación negativa y con tu código cambiarías su valor de value 1-1 a ''

Cierto. Eso si, señalar que null también se evalúa como undefined en este caso particular (por lo que comentas de la conversión).

CitarEn este caso casi que es mejor usar un if:
if (value === undefined) value = 0;


Seria lo más correcto si, aunque ese modo de presentarlo es muy feo  :xD


Saludos

Leguim

Les agradezco sus explicaciones, la función recibía una cadena...

Muchas gracias...

@XSStringManolo

Cita de: #!drvy en  1 Enero 2020, 04:21 AM
Cierto. Eso si, señalar que null también se evalúa como undefined en este caso particular (por lo que comentas de la conversión).


Seria lo más correcto si, aunque ese modo de presentarlo es muy feo  :xD


Saludos
También comentar que puede ser que se intente acceder a un objeto a través de su referencia y se compare value a Object object en vez de a la propiedad o valor referenciado. Para esos casos hay que usar instanceof.


He estado probando y buscando cosas for fun.

Bites sin contar identación y espacios no imprescindibles.

value = value == undefined ? '' : value;
256bits

if (value === undefined) value = 0;
232bits

if (value == void 0) value=0;
200bits

if (value == [][[]]) value=0;
192bits

value==[][[]]?value=0:0;
192bits

value==[].$?value=0:0
168bits

if(i==[].$)i=0;
120bits

i==[].$?i=0:0
104bits

De 40 caracteres a 13. No parece mucho hasta que haces copia y pega 10 veces en varios condicionales, añades más expresiones al condicional, etc.
Código (javascript) [Seleccionar]
<html>
<body>
<script>
var i;
i==[].$?i=0:0

alert(i);
</script>
</body>
</html>