解构对象和默认参数

Destructuring Objects and default parameters

我有一个涉及默认参数和对象解构的问题需要解决。 我有一个对象 'product' 具有这种形状:

{
     name: "Slip Dress",
     priceInCents: 8800,
     availableSizes: [ 0, 2, 4, 6, 10, 12, 16 ]
   }

到目前为止,这是我的代码,但我收到一个错误,指出 'availableSizes' 不可迭代。有人可以帮我更正此代码吗?

我已经尝试调整我的函数中的默认参数,但我已经移动了我的 return 语句但无济于事。

function checkIfSizeIsAvailable(product = {availableSizes:[]}, size = 0) {
  // let availableSizes = product;
  let foundSize = "";
  for (let sizeCheck of product.availableSizes) {
    if (sizeCheck === size) {
      foundSize = size;
    }
  }
  if (foundSize === ""){
    return false;
  } else {
    return true;
  }
  //for (let i = 0; i < sizes.length; i++) {
  // return false;
}

正如 VLAZ 在评论中提到的,您可以在没有 availableSizes 字段的情况下传递对象,这会导致该错误。

当您的变量一起在赋值的左侧大小上形成 object/array 时,就会发生解构:

function checkIfSizeIsAvailable(product = {availableSizes:[]}, size = 0) {
  // ^ Because of the default parameter, product always exists
  // Now we actually destructure with a default value for missing fields
  const { availableSizes = [] } = product;
}

或更紧凑:

function checkIfSizeIsAvailable({ availableSizes = [] } = {availableSizes:[]}, size = 0) {

}

请注意,这不会防御非数组值,甚至是虚假值。用户可以传递 { availableSizes: false } 并且您的 availableSizes 也将是 false.