Script Preparation code:
AخA
 
var fn = function(){};
var obj = {};
var objNull = null;
var unknown; // undefined
Tests:
  • typeof function

     
    var isFuncTrue = typeof fn === 'function';
    var isFuncFalse = typeof obj === 'function';
    var isFuncFalse2 = typeof objNull === 'function';
    var isFuncFalse3 = typeof unknown === 'function';
  • call in function

     
    var isFuncTrue = fn && 'call' in fn;
    var isFuncFalse = obj && 'call' in obj;
    var isFuncFalse2 = objNull && 'call' in objNull;
    var isFuncFalse3 = unknown && 'call' in  unknown;
  • !!fn?.call

     
    var isFuncTrue = !!fn?.call;
    var isFuncFalse = !!obj?.call;
    var isFuncFalse2 = !!objNull?.call;
    var isFuncFalse3 = !!unknown?.call;
  • fn?.call != null

     
    var isFuncTrue = fn?.call != null;
    var isFuncFalse = obj?.call != null;
    var isFuncFalse2 = objNull?.call != null;
    var isFuncFalse3 = unknown?.call != null;
  • fn?.call != void 0

     
    var isFuncTrue = fn?.call != void 0;
    var isFuncFalse = obj?.call != void 0;
    var isFuncFalse2 = objNull?.call != void 0;
    var isFuncFalse3 = unknown?.call != void 0;
  • isFuncTrue = fn?.call != undefined;

     
    var isFuncTrue = fn?.call != undefined;
    var isFuncFalse = obj?.call != undefined;
    var isFuncFalse2 = objNull?.call != undefined;
    var isFuncFalse3 = unknown?.call != undefined;
Rendered benchmark preparation results:

Suite status: <idle, ready to run>

Previous results

Experimental features:

  • Test case name Result
    typeof function
    call in function
    !!fn?.call
    fn?.call != null
    fn?.call != void 0
    isFuncTrue = fn?.call != undefined;

    Fastest: N/A

    Slowest: N/A

Latest run results:
Run details: (Test run date: one year ago)
Mozilla/5.0 (iPhone; CPU iPhone OS 17_1_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.1.1 Mobile/15E148 Safari/604.1
Mobile Safari 17 on iOS 17.1.1
View result in a separate tab
Test name Executions per second
typeof function 9300926.0 Ops/sec
call in function 6173735.5 Ops/sec
!!fn?.call 6911329.0 Ops/sec
fn?.call != null 9090097.0 Ops/sec
fn?.call != void 0 8914031.0 Ops/sec
isFuncTrue = fn?.call != undefined; 2929500.0 Ops/sec