JS.next

JavaScriptの最新実装情報を追うブログ

デフォルト引数が実装された

概要

引数が渡されなかった際のデフォルト値の設定が可能になった。


こう書くと

function fn( arg = 'default' ) {

  return arg

}

これと同じ効果になる。

function fn( arg ) {

  if ( arg === undefined ) arg = 'default'

  return arg

}


また、引数を指定しなかった場合のみならず、undefinedを渡した時にもデフォルト値になる。

fn('hoge')     // "hoge"
fn()           // "default"
fn(undefined)  // "default"


そしてデフォルト値を設定した引数以降はfn.lengthでカウントされない。

var fn = (a, b, c = 0, d, e) => {}

fn.length  // 2


応用:分割代入との組み合わせ

メッセージを一定時間表示させる関数を考える。

function showMessage( mes, duration ) {

このdurationにデフォルト値を設定するとこうなる。

function showMessage( mes, duration = 5000 ) {

ここで将来的に他の引数も受け取れるようにしたいということで、
第二引数をオブジェクトの形にするとこうなる。

function showMessage( mes, {duration = 5000} ) {

しかしこうすると第二引数が省略された時にundefinedからdurationプロパティを探そうとしてエラーになる。
したがってこういう場合は分割代入引数自体にデフォルト値として空オブジェクトを設定する必要がある。

function showMessage( mes, {duration = 5000} = {} ) {

この形がオプショナルな分割代入引数を作る際のテンプレである。


実装されるバージョン

V8 4.6.79(基本) 4.7.7(正しいlength + 分割代入との組み合わせ)