function tipos funciones - Establecer un valor de parámetro predeterminado para una función de JavaScript
function read_file(file, delete_after) {
delete_after = delete_after || "my default here";
//rest of code
}
Esto asigna a delete_after
el valor de delete_after
si no es un valor falsey , de lo contrario asigna la cadena "my default here"
. Para obtener más detalles, consulte la encuesta de Doug Crockford sobre el idioma y consulte la sección sobre Operadores .
Este enfoque no funciona si desea pasar un valor falsey , es decir, false
, null
, undefined
, 0
o ""
. Si necesita que se pasen valores falsey , deberá utilizar el método en la respuesta de Tom Ritter .
Cuando se trata de una serie de parámetros para una función, a menudo es útil permitir que el consumidor pase los argumentos de parámetros en un objeto y luego fusione estos valores con un objeto que contiene los valores predeterminados para la función
function read_file(values) {
values = merge({
delete_after : "my default here"
}, values || {});
// rest of code
}
// simple implementation based on $.extend() from jQuery
function merge() {
var obj, name, copy,
target = arguments[0] || {},
i = 1,
length = arguments.length;
for (; i < length; i++) {
if ((obj = arguments[i]) != null) {
for (name in obj) {
copy = obj[name];
if (target === copy) {
continue;
}
else if (copy !== undefined) {
target[name] = copy;
}
}
}
}
return target;
};
usar
// will use the default delete_after value
read_file({ file: "my file" });
// will override default delete_after value
read_file({ file: "my file", delete_after: "my value" });
Me gustaría que una función de JavaScript tenga argumentos opcionales en los que establezco un valor predeterminado, que se usa si el valor no está definido. En Ruby puedes hacerlo así:
def read_file(file, delete_after = false)
# code
end
¿Funciona esto en JavaScript?
function read_file(file, delete_after = false) {
// Code
}
En ECMAScript 6 podrás escribir exactamente lo que tienes:
function read_file(file, delete_after = false) {
// Code
}
Esto establecerá delete_after
en false
si no está presente o undefined
. Puede usar características de ES6 como esta hoy con transpilers como Babel .
Vea el artículo de MDN para más información .
Esa solución es trabajo para mí en js:
function read_file(file, delete_after) {
delete_after = delete_after || false;
// Code
}
Al ser un desarrollador de C ++ desde hace mucho tiempo (Rookie to web development :)), cuando me topé con esta situación, hice la asignación de parámetros en la definición de la función, como se menciona en la pregunta, de la siguiente manera.
function myfunc(a,b=10)
Pero ten en cuenta que no funciona de manera consistente en los navegadores. Para mí, funcionó en Chrome en mi escritorio, pero no funcionó en Chrome en Android. Opción más segura, como muchos han mencionado anteriormente es -
function myfunc(a,b)
{
if (typeof(b)==='undefined') b = 10;
......
}
La intención de esta respuesta no es repetir las mismas soluciones, lo que otros ya han mencionado, sino informar que la asignación de parámetros en la definición de función puede funcionar en algunos navegadores, pero no confiar en ella.
Como una actualización ... con ECMAScript 6, puede FINALMENTE establecer valores predeterminados en las declaraciones de parámetros de función, de la siguiente manera:
function f (x, y = 7, z = 42) {
return x + y + z
}
f(1) === 50
Como se hace referencia en - http://es6-features.org/#DefaultParameterValues
Según la sintaxis
function [name]([param1[ = defaultValue1 ][, ..., paramN[ = defaultValueN ]]]) {
statements
}
Puede definir el valor por defecto de los parámetros formales. y también verifique el valor indefinido usando la función typeof .
ES6: Como ya se mencionó en la mayoría de las respuestas, en ES6, simplemente puede inicializar un parámetro junto con un valor.
ES5: La mayoría de las respuestas dadas no son lo suficientemente buenas para mí porque hay ocasiones en las que es posible que tenga que pasar valores de falsey como 0
, null
e undefined
a una función. Para determinar si un parámetro no está definido porque ese es el valor que pasé en lugar de indefinido porque no se ha definido en absoluto, hago esto:
function foo (param1, param2) {
param1 = arguments.length >= 1 ? param1 : "default1";
param2 = arguments.length >= 2 ? param2 : "default2";
}
Si está utilizando ES6+
, puede configurar los parámetros predeterminados de la siguiente manera:
function test (foo = 1, bar = 2) {
console.log(foo, bar);
}
test(5); // foo gets overwritten, bar remains default parameter
Si necesitas la sintaxis de ES5
puedes hacerlo de la siguiente manera:
function test(foo, bar) {
foo = foo || 2;
bar = bar || 0;
console.log(foo, bar);
}
test(5); // foo gets overwritten, bar remains default parameter
En la sintaxis anterior se usa el operador OR
. El operador OR
siempre devuelve el primer valor si esto se puede convertir en true
si no devuelve el valor del lado derecho. Cuando se llama a la función sin un argumento correspondiente, la variable de parámetro ( bar
en nuestro ejemplo) se establece como undefined
por el motor JS. undefined
Entonces se convierte en falso y, por lo tanto, el operador OR
devuelve el valor 0.
def read_file(file, delete_after = false)
# code
end
El siguiente código puede funcionar en esta situación, incluido ECMAScript 6 (ES6) y versiones anteriores.
function read_file(file, delete_after) {
if(delete_after == undefined)
delete_after = false;//default value
console.log('delete_after =',delete_after);
}
read_file('text1.txt',true);
read_file('text2.txt');
como valor predeterminado en idiomas funciona cuando el valor del parámetro de la función se omite al llamar, en JavaScript se asigna a indefinido . Este enfoque no parece atractivo mediante programación, pero tiene compatibilidad con versiones anteriores .
Si, por algún motivo, no está usando ES6 y está usando lodash
aquí encontrará una forma concisa de los parámetros de función predeterminados a través del método _.defaultTo
:
var fn = function(a, b) {
a = _.defaultTo(a, 'Hi')
b = _.defaultTo(b, 'Mom!')
console.log(a, b)
}
fn() // Hi Mom!
fn(undefined, null) // Hi Mom!
fn(NaN, NaN) // Hi Mom!
fn(1) // 1 "Mom!"
fn(null, 2) // Hi 2
fn(false, false) // false false
fn(0, 2) // 0 2
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
Lo que establecerá el valor predeterminado si el valor actual es NaN , nulo o no definido