45

¿Alguien sabe que significa esto en JavaScript? especificamente el ? y :

n = self.isUploadable ? fileStack.length : numFiles,
Carlos Muñoz
  • 12,864
  • 2
  • 42
  • 62
Danilo
  • 2,444
  • 6
  • 37
  • 77

4 Answers4

39

Operador condicional (ternario)

Que es una forma más corta de la estructura "if else".

Por ejemplo

var result = 6%2==0 ? "Even" : "Odd";

Es lo mismo que

if(6%2==0){
     result = "Even";
}
else{
     result = "Odd";
}

por lo que en tu ejemplo

if(self.isUploadable){
    n = fileStack.length;
}
else{
     n = numFiles;
}
Dylan Meeus
  • 637
  • 5
  • 9
  • 6
    No es totalmente equivalente: el resultado de ` ? : ` es una *expresión* mientras que `if .. else` simplemente es un *statement* – Carlos Muñoz Jan 06 '16 at 15:31
  • 3
    No es una forma de acortar if-else porque a diferencia de este el operador ternario devuelve siempre un valor por ser una expresion. Lastima que hay personas confundidas por el sobrevoto de esto, sobretodo el que acepto la publicacion. –  Jan 30 '16 at 11:13
  • A mi siempre se me olvida como se llama ese operador, pero es muy útil, en python y en c++ se usan de forma fácil, bueno, en python es aún más fácil. – SalahAdDin Mar 14 '16 at 06:30
30

Esa sintáxis es de JavaScript y corresponde al operador ternario:

condicion ? expresion1 : expresion2

Ejemplos:

> var mayor = 4 > 5 ? "Si" : "No";
> mayor
"No"
> var mayor = 100000 > 0 ? true : false;
> mayor
true
> var mayor = array1.length > array2.length ? hacerAlgo() : hacerOtraCosa();

Ten en cuenta que en el último ejemplo tanto hacerAlgo() y hacerOtraCosa() deberían retornar algo que tenga sentido según el contexto bajo el cual estás trabajando.

Dado que los operadores ternarios son expresiones en JavaScript, es posible usarlos de esta forma, por ejemplo:

> var masculino = false;
> var saludo = "Hola " + (masculino ? "chico" : "chica") + ", ¿cómo estás?";
> saludo
"Hola chica, ¿cómo estás?"

Su contraparte usando la sentencia if {} else {} sería:

var masculino = false;
var saludo = "Hola ";
if (masculino) {
    saludo += "chico";
} else {
    saludo += "chica";
}
saludo += ", ¿cómo estás?";

Si, te ahorras algunas líneas de código.

Repondiendo tus preguntas, ? simplemente evalúa la condición que está a la izquierda y : es simplemente el separador entre las expresiones que son evaluadas según el resultado de la condición.

Nota:

No confundir operador ternario con el operador Elvis.

César
  • 16,990
  • 6
  • 37
  • 76
  • 2
    `No confundir operador ternario con el operador Elvis.` El operador Elvis no existe en JavaScript, ¿verdad? – Peter Olson Jan 07 '16 at 01:17
  • @PeterOlson asi es, no existe en JavaScript. Es mas que nada una nota para la gente con background en PHP, por ejemplo, que pueden estar acostumbrados a usarlo ya que la sintáxis es similar usando `?` y `:` – César Jan 07 '16 at 01:21
3

Si se diera el caso de que isUploadable es true solo cuando fileStack contenga datos, entonces esto también te serviría

n = fileStack.length || numFiles;

Recuerda que:

  • null
  • undefined
  • false
  • 0
  • '' (string empty)

son false para JavaScript.

JohnTrack
  • 234
  • 1
  • 5
-2

Es un if else se puede usar tanto en javascript como en PHP

$variable = ($var_1 == $var_2 )?valor si es cierto:valor si es falso;
PaperBirdMaster
  • 44,474
  • 6
  • 44
  • 82
Ing. Marquez Adam
  • 395
  • 2
  • 4
  • 15