2011-09-14 20 views
19

me he convertido en aficionado a la ayuda de PHP para el "corto ternario", omitiendo la segunda expresión:¿Es compatible Javascript con el término ternario (más bien, variación de) que en PHP?

// PHP 

$foo = 'hello'; 
$bar = ''; 

echo $foo ?: 'world'; // hello 
echo $bar ?: 'world'; // world 

¿El Javascript admite cualquier tipo de sintaxis como esta? He intentado ?: dando como resultado un error de sintaxis. Soy consciente de los cortocircuitos booleanos, pero eso no es factible por lo que estoy haciendo actualmente; siendo:

// Javascript 

var data = { 
    key: value ?: 'default' 
}; 

¿Alguna sugerencia? (Podría envolverlo en una función anónima inmediatamente invocado, pero que parece tonto)

+0

@NullUserException - Estoy usando jQuery, y al mismo tiempo hacer I * * caché mis selecciones, el valor por defecto no es el resultado de una llamada a '.data()', y yo estaba simplemente buscando evitar una segunda llamada usando la sintaxis sugerida (* y evitando almacenar el valor en una variable temporal *) – Dan

Respuesta

35
var data = { 
    key: value || 'default' 
}; 
+0

¡Nifty! Gracias @SomeGuy. Sin embargo, parece terriblemente extraño que Javascript (* read, any language *) devuelva un booleano de dicha comparación. Quiero decir, sé que está vagamente escrito, pero sheesh. – Dan

+0

Si simplemente está tratando de permitir valores predeterminados, ['$ .extend'] (http://api.jquery.com/jQuery.extend/) es una función muy útil. – zzzzBov

+1

@Bracketworks: los operadores booleanos no devuelven booleanos en muchos idiomas (especialmente funcionales). Simplemente devolverán un lado del operador (o 'falso'). – NikiC

12

Sí, utilice ||. A diferencia de PHP, el operador de || de JavaScript devolverá el primer valor que no sea falso, no un booleano normalizado.

foo || 'world' 
+0

Gracias @jimbojw - SomeGuy lo golpeó sin embargo :) – Dan

+3

Sí, bueno, ese es el precio que pago por explicarlo en lugar de simplemente escribir la respuesta. – jimbojw

+1

'var foo = foo' = _ = – Leonid

0
var myFunc = function(foo) { 
    foo = foo || 'my default value for foo'; 
} 
Cuestiones relacionadas