функция javaScript - почему мой аргумент по умолчанию не работает? - PullRequest
9 голосов
/ 02 июня 2019

Моя функция Javascript заставляет мою консоль возвращать мне:

TypeError: style is null

Вот фрагмент:

let style = {
  one: 1,
  two: 2,
  three: 3
}

function styling(style = style, ...ruleSetStock) {

  return ruleSetStock.map(ruleSet => {
    console.log(ruleSet)
    return style[ruleSet]
  })
}

console.log(styling(null, "one", "two", "three"))

Я не могу понять, почему.Мне кажется, все отлично,

Любой намек был бы великолепен, спасибо.

Ответы [ 3 ]

10 голосов
/ 02 июня 2019

Параметры по умолчанию назначается только в том случае, если передано no value или undefined

let defaultStyle = {  one: 1, two: 2, three: 3 }

function styling(style = defaultStyle, ...ruleSetStock) {
  return ruleSetStock.map(ruleSet => {
    return style[ruleSet]
  })
}

console.log(styling(undefined, "one", "two", "three"))

Что если я хочу использовать значение по умолчанию для всех типов falsy values such as false, '', null?

Вы не можете использовать параметр по умолчанию для этого, но вы можете использовать ||

let style1 = {  one: 1, two: 2, three: 3 }

function styling(style, ...ruleSetStock) {
  style = style || style1
  return ruleSetStock.map(ruleSet => {
    return style[ruleSet]
  })
}

console.log(styling(undefined, "one", "two", "three"))
console.log(styling(null, "one", "two", "three"))
console.log(styling('', "one", "two", "three"))
console.log(styling(0, "one", "two", "three"))
1 голос
/ 02 июня 2019

Две вещи, которые необходимо обновить

  1. Передача параметра по умолчанию либо без значения, либо без определения
  2. изменение переменной стиля по умолчанию на другое имя

пожалуйстасм обновленный код

let defaultStyle = {
  one: 1,
  two: 2,
  three: 3
}

function styling(style = defaultStyle, ...ruleSetStock) {

  return ruleSetStock.map(ruleSet => {
    console.log(ruleSet)
    return style[ruleSet]
  })
}

console.log(styling(undefined, "one", "two", "three"))

Вы можете написать приведенный выше фрагмент более понятным способом, используя es6

, см. Приведенный ниже фрагмент

const defaultStyle = {
  one: 1,
  two: 2,
  three: 3
}


const styling = (style = defaultStyle, ...ruleSetStock) => ruleSetStock.map(ruleSet => {
   return style[ruleSet]
})

console.log(styling(undefined, "one", "two", "three"))
0 голосов
/ 03 июня 2019

Переименуйте вашу переменную style в styles, а затем вместо null в качестве первого аргумента при вызове styling используйте undefined:

const styles = {
  one: 1,
  two: 2,
  three: 3
}

function styling(style = styles, ...ruleSetStock) {

  return ruleSetStock.map(ruleSet => {
    console.log(ruleSet)
    return style[ruleSet]
  })
}

console.log(styling(undefined, "one", "two", "three"))
// one
// two
// three
// [1, 2, 3]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...