2011-09-14 12 views
19

Sono diventato appassionato di supporto di PHP per il "breve ternario", omettendo la seconda espressione:JavaScript supporta il breve ternario (piuttosto la variazione di) come in PHP?

// PHP 

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

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

non JavaScript supporta qualsiasi tipo di sintassi come questo? Ho provato ?: causando un errore di sintassi. Sono a conoscenza dei cortocircuiti booleani, ma non è fattibile per quello che sto facendo attualmente; cioè:

// Javascript 

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

Qualche suggerimento? (ho potuto avvolgerla in una funzione anonima immediatamente invocato, ma che sembra stupido)

+0

@NullUserException - Sto utilizzando jQuery, e mentre I * * fare di cache le mie selezioni, il valore non predefinito è il risultato di una chiamata a '.data()', e io ero solo cercando di evitare una seconda chiamata utilizzando la sintassi suggerita (* ed evitare di memorizzare il valore in una variabile temporanea *) – Dan

risposta

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

Nifty! Grazie a @SomeGuy: sembra strano, però, che Javascript (* leggi, qualsiasi lingua *) restituisca un non-booleano da tale confronto. Voglio dire, so che è tipicamente scritto, ma sheesh. – Dan

+0

Se si sta semplicemente tentando di consentire valori predefiniti, ['$ .extend'] (http://api.jquery.com/jQuery.extend/) è una funzione molto utile. – zzzzBov

+1

@Bracketworks: gli operatori booleani non restituiscono booleani in molte lingue (specialmente funzionali). Restituiranno solo un lato dell'operatore (o 'false'). – NikiC

12

Sì, utilizzare ||. A differenza di PHP, l'operatore || di JavaScript restituirà il primo valore non falsificato, non un booleano normalizzato.

foo || 'world' 
+0

Grazie @jimbojw - SomeGuy ti ha battuto su di esso però :) – Dan

+3

Sì, beh, questo è il prezzo che pago per spiegarlo invece di scrivere semplicemente la risposta. – jimbojw

+1

'var foo = foo' = _ = – Leonid

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