Функция JavaScript - проблема именованных параметров при пропуске необязательного параметра - PullRequest
0 голосов
/ 30 июня 2019

Если вы запустите приведенный ниже код в консоли браузера:

function named_param(a, b=null, c=5) {
  console.log("a="+a);
  console.log("b="+b);
  console.log("c="+c);
}

named_param(3, c=10)

Полученный результат:

a=3
b=10
c=5

Вывод, который я ищу, это:

a=3
b=null
c=10

Я видел два приведенных ниже URL-адреса и попробовал несколько обходных путей, но это не сработало

Параметры функции Javascript не работают

Именованные параметры в javascript

Дайте мне знать, что я делаю здесь неправильно. Пробовал следующие коды, но не работал: A:

function named_param(a, {b=null, c=5}) {
  console.log("a="+a);
  console.log("b="+b);
  console.log("c="+c);
}

named_param(3, c=10)

B

function named_param(a, {b=null, c=5}={}) {
  console.log("a="+a);
  console.log("b="+b);
  console.log("c="+c);
}

named_param(3, c=10)

Ответы [ 4 ]

1 голос
/ 30 июня 2019

При использовании решения по деструктуризации вы должны передать фактический объект.named_param(3, c=10) просто недопустимый синтаксис (ну, это действительно, но это присваивание глобальной переменной c, которая передается как второй аргумент - без имен).

function named_param(a, {b=null, c=5}={}) {
  console.log("a="+a);
  console.log("b="+b);
  console.log("c="+c);
}

named_param(3)
named_param(3, {b:"hi"})
named_param(3, {c:10})
named_param(3, {b:"hi", c:10})
1 голос
/ 30 июня 2019

Вы можете пропустить параметр между ними, поэтому, когда вы передаете

named_param(3, c=10)
            |   |_____________ considered as `b`
            |_________________ considered as `a`

Вы можете использовать объект и разрушение

function named({a,b=null,c=3} = {}){
  console.log('a-->',a)
  console.log('b-->',b)
  console.log('c-->',c)
}

named({a:1,c:2})
named()
named({c:2})
0 голосов
/ 30 июня 2019

Ну, это не проблема, просто вы пытаетесь использовать именованные параметры там, где они вообще не поддерживаются.

Чтобы достичь того, что вам нужно, вы должны сделать так:

function named_param({a, b, c}) {
  console.log("a="+a);
  console.log("b="+b);
  console.log("c="+c);
}

named_param({a:5, c:9}); 
// Output:
// a=5
// b=undefined
// c=9

Сначала я неправильно понял ваш вопрос и предложил использовать присвоение деструктуры с arguments объектом.

0 голосов
/ 30 июня 2019

Что вы можете сделать, это что-то, используя деструктурирующие объекты, такие как:

function named_params({a = 4, b = null, c = 5} = {a:1, b: 2, c:3}) { console.log(a,b,c) }

, тогда вызов вашей функции будет:

named_params({a: 3, c:10})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...