function node js - Задайте значение параметра по умолчанию для функции JavaScript
function read_file(file, delete_after) {
delete_after = delete_after || "my default here";
//rest of code
}
Это присваивает delete_after
после значения delete_after
если оно не является ложным значением, иначе оно присваивает строку "my default here"
. Для более подробной информации ознакомьтесь с обзором Doug Crockford по языку и ознакомьтесь с разделом «Операторы» .
Этот подход не работает, если вы хотите передать значение false
, т.е. false
, null
, undefined
, 0
или ""
. Если вам требуются значения ложности, которые нужно передать, вам нужно будет использовать метод в ответе Тома Риттера .
При работе с несколькими параметрами функции часто бывает полезно разрешить потребителю передавать аргументы параметров в объекте и затем объединять эти значения с объектом, который содержит значения по умолчанию для функции
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;
};
использовать
// 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" });
Я хотел бы, чтобы функция JavaScript имела необязательные аргументы, для которых я устанавливал значение по умолчанию, которое используется, если значение не определено. В Ruby вы можете сделать это следующим образом:
def read_file(file, delete_after = false)
# code
end
Это работает в JavaScript?
function read_file(file, delete_after = false) {
// Code
}
В ECMAScript 6 вы действительно сможете написать именно то, что у вас есть:
function read_file(file, delete_after = false) {
// Code
}
Это установит delete_after
значение false
если оно не delete_after
или undefined
. Сегодня вы можете использовать такие функции ES6, как Transpilers, такие как Babel .
См. Статью MDN для получения дополнительной информации .
это решение работает для меня в js:
function read_file(file, delete_after) {
delete_after = delete_after || false;
// Code
}
будучи разработчиком C ++ в течение длительного времени (Rookie to web development :)), когда я впервые столкнулся с этой ситуацией, я сделал назначение параметра в определении функции, как это указано в вопросе, следующим образом.
function myfunc(a,b=10)
Но будьте осторожны, что он не работает последовательно в браузерах. Для меня это работало на хроме на моем рабочем столе, но не работало на хроме на Android. Более безопасный вариант, как многие из упомянутых выше -
function myfunc(a,b)
{
if (typeof(b)==='undefined') b = 10;
......
}
Намерение для этого ответа состоит в том, чтобы не повторять те же решения, о чем уже упоминалось ранее, а сообщить, что назначение параметров в определении функции может работать на некоторых браузерах, но не полагаться на него.
В качестве обновления ... с ECMAScript 6 вы можете ПОЛНОСТЬЮ установить значения по умолчанию в объявлениях параметров функции следующим образом:
function f (x, y = 7, z = 42) {
return x + y + z
}
f(1) === 50
Как упоминалось - http://es6-features.org/#DefaultParameterValues
В соответствии с синтаксисом
function [name]([param1[ = defaultValue1 ][, ..., paramN[ = defaultValueN ]]]) {
statements
}
вы можете определить значение по умолчанию для формальных параметров. а также проверить неопределенное значение с помощью функции typeof .
ES6: Как уже упоминалось в большинстве ответов, в ES6 вы можете просто инициализировать параметр вместе со значением.
ES5: Большинство из приведенных ответов недостаточно для меня, потому что есть случаи, когда мне, возможно, придется передавать ложные значения, такие как 0
, null
и undefined
для функции. Чтобы определить, является ли параметр неопределенным, потому что это значение, которое я передал вместо неопределенного из-за того, что не было определено вообще, я делаю это:
function foo (param1, param2) {
param1 = arguments.length >= 1 ? param1 : "default1";
param2 = arguments.length >= 2 ? param2 : "default2";
}
Если вы используете ES6+
вы можете установить параметры по умолчанию следующим образом:
function test (foo = 1, bar = 2) {
console.log(foo, bar);
}
test(5); // foo gets overwritten, bar remains default parameter
Если вам нужен синтаксис ES5
вы можете сделать это следующим образом:
function test(foo, bar) {
foo = foo || 2;
bar = bar || 0;
console.log(foo, bar);
}
test(5); // foo gets overwritten, bar remains default parameter
В приведенном выше синтаксисе используется оператор OR
. Оператор OR
всегда возвращает первое значение, если оно может быть преобразовано в true
если оно не возвращает значение righthandside. Когда функция вызывается без соответствующего аргумента, переменная параметра ( bar
в нашем примере) устанавливается undefined
механизмом JS. undefined
Затем преобразуется в значение false и, следовательно, оператор OR
возвращает значение 0.
def read_file(file, delete_after = false)
# code
end
Следующий код может работать в этой ситуации, включая ECMAScript 6 (ES6), а также более ранние версии.
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');
поскольку значение по умолчанию в языках работает, когда значение параметра функции пропускается при вызове, в JavaScript ему присваивается неопределенное значение . Этот подход не выглядит привлекательно программно, но имеет обратную совместимость .
Если по какой-либо причине вы не находитесь на ES6 и используете lodash
это краткий путь к параметрам функции по умолчанию с помощью метода _.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>
Который установит значение по умолчанию, если текущее значение - NaN , null или undefined