LoginSignup
0
0

More than 3 years have passed since last update.

【JavaScript】関数の引数が{}なのはオブジェクト

Last updated at Posted at 2021-03-31

関数の引数で引数に{}というものがありなんじゃろ?と思った

ので備忘録メモ

js-primeのオブジェクトの[ES2020] Optional chaining演算子(?.) のところ。

printWidgetTitle({
    // タイトルが定義されてない空のオブジェクト
});

こんな記述があって、引数に{}ってなんだろ?と思ったら見た目通りオブジェクトだったというお話。

試した感じ

関数 testの処理で、引数をオブジェクトと想定し、そのプロパティ「hoge」をconsole.logしてみて見比べた。
引数の{}を消したら、ちょっとエラーが変わります。

function test(argument) {
  console.log(argument.hoge)
}

test({}); // -> undefined になる。
test(); // -> Error: argument is undefined になる。
前者はオブジェクトはあるけど中身がundefinedだよ!
後者はそもそも引数であるオブジェクトがないよ!という感じでしょうか。

js-primeにもあるOptional chaining演算子(?.) を使った場合

function test(argument) {
 console.log(argument?.hoge)
}

test({}); // -> undefined になる。
test(); // -> undefined になる。

と、どちらもundefinedとなります。
ドット記法(.)だと例外を発生してしまいますが、この書き方(?.)ならそのプロパティ自体が見つからない場合も、undefinedにしてくれます。
if文を使わずにかけます。

ついでにNullish coalescing演算子(??) を使った場合

最終的に何も見つからない場合の処理をかけます。

function test(argument) {
  console.log(argument?.a ?? "ないです")
}

test({}); // ないです になる
test(); // ないです になる

//ちなみにちゃんとオブジェクト渡すパターン
test(
  {
    a:"ややや",
    b:"よよよ"
  }
)//やややになる
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0