関数と他のオブジェクトとの判別は、typeof
かinstanceof
演算子でできる。
function 関数() {}
class クラス {}
function* ジェネレータ() {}
let 関数たち = [関数, クラス, ジェネレータ]
let 全部関数なの = 関数たち.every((e) => {
return typeof e === 'function' && e instanceof Function
})
console.log(全部関数なの) // true
関数のようなアクセサはtypeof
やinstanceof
で判定できない。
// アクセサは参照や代入時に関数のような処理を付随できるが、関数ではない。
// (typeofやinstanceofで判定できない)
let アクセサ = {
get ゲッター() {return 'ゲット'},
set セッター(引数) {return '無駄なreturn'}
}
// ゲッターは参照時にその戻り値を評価する。
// セッターは参照するとundefined
console.log(アクセサ.ゲッター, アクセサ.セッター) // ゲット undefined
// (typeofなどでの関数判定は無意味)