Hallo,
Wenn ich an einer Library oder einem API schreibe ist es nicht wegzudenken, den Parameter-Input-Typ zu kennen - bspw. wenn man unterschiedliche Signaturen für eine Funktion zur Verfügung stellen möchte oder eine aussagekräftige Exception werfen.
Ja - das ist aber auch der einzige Fall, wo solche Typechecks meiner Meinung nach sinnvoll sind.
Aber selbst dort habe ich nie mit der [[Class]] arbeiten müssen (das ist der interne Typ, der Object.prototype.toString zurückgibt). Meist reicht ein simples typeof oder ein Truthy-Check aus, um die Signaturrn eine Funktion zu unterscheiden.
Da stimme ich dir eigentlich zu, aber
Allgemein setze ich in JavaScript auf "Duck Typing". Sobald ein Parameter für eine Operation nutzbar ist, sollte er auch einfach verwendet werden. Strenge Typechecks schränken die Flexibilität nur ein. Meist muss ich lediglich truthy/falsy, String, Number, Liste/Collections und ggf. Objekte erkennen.
typeof regelt nicht alles. Arrays könnte man noch mit foo instanceof Array
finden. Bei Object wird es schwieriger (vielen Dank an die Pfeife, die für typeof foo === 'object' für foo === null verantwortlich ist). Man könnte nun
Object.isObject = function isObject(value) {
return typeof value === 'object' && value !== null;
}
implementieren, da es für Arrays ja bereits Array.isArray()
gibt. Oder wie pflegst du es, diese Kandidaten zu erkennen?