value = value == undefined ? '' : value;
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!
Es un operador ternario.
https://es.wikipedia.org/wiki/Operador_ternario
Básicamente esta haciendo esto:
if (value == undefined) {
value = '';
} else {
value = value;
}
Este en concreto creo que tiene 0 sentido porque se repite mucho pudiendo hacer:
value = value || '';
https://es.wikipedia.org/wiki/Evaluaci%C3%B3n_de_cortocircuito
Saludos
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:
if (value == undefined) {
value = '';
} else {
value = value;
}
Este en concreto creo que tiene 0 sentido porque se repite mucho pudiendo hacer:
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.
function ej()
{
if (arguments.length === 0)
return;
else
{
arguments[0] ...
/*trabajar con argumentos*/
}
}
var value = ej();
value = ej("hola");
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
Les agradezco sus explicaciones, la función recibía una cadena...
Muchas gracias...
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.
<html>
<body>
<script>
var i;
i==[].$?i=0:0
alert(i);
</script>
</body>
</html>