Рассматривая вопрос, связанный с переносом функции 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, похоже, не упоминает об этом)?

17
Jason Sperske 2 Фев 2013 в 04:04

3 ответа

Лучший ответ

Похоже, что это в спецификации ECMAScript 6 и на данный момент поддерживается только Firefox

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/default_parameters

18
lostsource 2 Фев 2013 в 00:12

Ответ 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 / (как видно из ответа ДжоллиСина). Тройной эквивалент которого:

some_val = typeof some_val === 'undefined' ? 'default' : some_val;
8
Elias Van Ootegem 2 Фев 2013 в 00:28

Вроде. Вы можете сделать что-то вроде:

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
}
4
theJollySin 2 Фев 2013 в 00:07