Ответ 1
Это похоже на спецификацию ECMAScript 6 и на данный момент поддерживается только Firefox
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/default_parameters
Рассматривая вопрос о переносе функции PHP на JavaScript. Я видел, что я предполагал, был неправильным JavaScript:
function my_isnum(str, negative=false, decimal=false)
Затем я попробовал это в JSFiddle:
function my_isnum(str, negative=false, decimal=-2)
{
console.log(arguments);
console.log(str);
console.log(negative);
console.log(decimal);
}
my_isnum("5", "Hi");
И к моему полному изумлению это то, что я вижу в консоли Firebug:
["5", "Hi"]
5
Hi
-2
Теперь в Chrome это то, что я вижу:
Uncaught SyntaxError: Unexpected token =
Я не понимаю, это пример того, что какой-то ранний стандарт поддерживается Firefox (MDN на function
doesn ' t, похоже, это упоминает)?
Это похоже на спецификацию ECMAScript 6 и на данный момент поддерживается только Firefox
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/default_parameters
Ответ на Lostsource правильный, зайдите в ECMA6, значения по умолчанию, скорее всего, будут поддерживаться, я думаю, что это будет, но поскольку это все еще рабочий черновик, вы не можете быть уверены... На данный момент вы можете использовать логический или:
function foo(bar, foobar)
{
bar = bar || 'foobar';//once
foobar = foobar || !!bar || true;//or multiple times
Это работает, вроде как троянец. Выражения разрешены слева направо: как только JS встречает правдивое значение, то что будет назначено:
var someVar = false || undefined || null || 0 || 1;
Назначит 1 для someVar
. Если никакие значения не передаются функции, все аргументы по умолчанию назначаются undefined
, поэтому в этом случае:
myArgument = myArgument || 'default';
//is the same as:
myArgument = undefined || 'default';//evaluates to "default"
Но когда вы передаете false
в качестве аргумента или null
или пустую строку, значение по умолчанию будет назначено, поэтому будьте осторожны.
В этих случаях if/trernary лучше подходит (как видно из ответа JollySin). Тройной эквивалент которого равен:
some_val = typeof some_val === 'undefined' ? 'default' : some_val;
Сорт. Вы можете сделать что-то вроде:
function the_func(some_val) {
// if some_val is not passed to the_func
if (typeof some_val == 'undefined') {
some_val = 'default_some_val';
}
// now you can use some_val in the remaining parts of the method
}