una por pasar parametros parametro parameter opcionales opcional funcion desde defecto javascript

pasar - parametros por defecto javascript



Forma idiomática de establecer el valor predeterminado en javascript (2)

¿Cuál sería la forma más idiomática de hacer lo siguiente en javascript?

Si la persona que llama no pasa myParam a MyFunc, entonces quiero establecerlo en un valor predeterminado. Pero primero quiero intentar obtenerlo de otro objeto, que puede que aún no exista:

function MyFunc(myParam) { if (!myParam) { if (!myObj) { myParam = 10; } else { myParam = myObj.myParam; } } alert(myParam); }

Empecé a escribir:

myParam = myParam || myObj.mParam || 10

pero me di cuenta de que si myObj no existe, entonces esto fallaría. Podría adivinar lo siguiente:

myParam = myParam || (myObj && myObj.mParam) || 10

Incluso podría funcionar. Pero, ¿es la mejor manera?

¿Cómo lo haría, por ejemplo, John Resig?


Creo que las otras respuestas han demostrado que hay muchas maneras en que un one-liner puede fallar aquí. Mi versión a continuación es quizás más legible y no prueba explícitamente la existencia de objeto / propiedad, pero no es mucho más corta:

function MyFunc(myParam){ if (!myParam){ try{ myParam = myObj.myParam; } catch(e){ myParam = 10; } } }


Si myObj es global, necesita hacer referencia al objeto ventana, de lo contrario generará un error si myObj no está definido.

myParam = myParam || (window.myObj ? window.myObj.mParam : 10);

o

myParam = myParam || (window.myObj && window.myObj.mParam) || 10;

Esto también funciona:

myParam = myParam || ((typeof myObj !== "undefined") ? myObj.mParam : 10);