1. ホーム
  2. javascript

[解決済み] JS/ES6。未定義の構造化

2022-05-07 16:38:12

質問

このような構造化をしています。

const { item } = content
console.log(item)

をどのように扱えばよいのでしょうか? content === undefined - というエラーが発生します。

古い」方法だと、次のようになります。

const item = content && content.item

そこで、もし content が未定義である場合 -> item も未定義になります。

デストラクチャリングを使って同じようなことができますか?

どのように解決するのですか?

を使用することができます。 ショートサーキット評価 を指定すると、デフォルトで content はファルシーな値で、通常は undefined または null この場合

const content = undefined
const { item } = content || {}
console.log(item)                       // undefined

より慣用的でない( このコメントを見る ) の方法は、コンテンツをオブジェクトに広めてから再構築することです。 nullundefineds の値は無視されます。 .

const content = undefined
const { item } = { ...content }
console.log(item) // undefined

関数のパラメータを再構築する場合、デフォルトの ( = {} の例では)。

デフォルト値が適用されるのは、構造化解除パラメータが undefined ということは null の値ではエラーが発生します。

const getItem = ({ item } = {}) => item
console.log(getItem({ item: "thing" })) // "thing"
console.log(getItem())                  // undefined

try {
  getItem(null)
} catch(e) {
  console.log(e.message)                // Error - Cannot destructure property `item` of 'undefined' or 'null'.
}

また、デフォルト値を設定しても item プロパティを含まない場合は、そのプロパティを使用します。

const getItem = ({ item = "default" } = {}) => item
console.log(getItem({ item: "thing" })) // "thing"
console.log(getItem({ foo: "bar" }))    // "default"