これも忘れちゃうんですよね。
#Object.prototype.toString.callの結果で判定する
これがシンプルでよいかなと思います。
if(Object.prototype.toString.call(a) === '[object Array]')
なお、他の値でやってみるとこんな感じ
//空のオブジェクト
Object.prototype.toString.call({})
結果:"[object Object]"
//文字列
Object.prototype.toString.call("a")
結果:"[object String]"
//数値
Object.prototype.toString.call(1)
結果:"[object Number]"
//null
Object.prototype.toString.call(null)
結果:"[object Null]"
//undefined
Object.prototype.toString.call(undefined)
結果:"[object Undefined]"
//Boolean
Object.prototype.toString.call(true)
結果:"[object Boolean]"
//Function
Object.prototype.toString.call(function(){})
結果:"[object Function]"
//正規表現
Object.prototype.toString.call(/abc/)
結果:"[object RegExp]"