> 1. We want sane isObject and isNull predicates, ideally using typeof. Lack of > them continues to bite people, as the web contains code that wrongly assumes > typeof x == "object" => x.foo won't throw on null x.
What are the use cases for typeof? Offhand, I see five and for most of them, other solutions seem to be better. 1. Checking whether a variable has been declared. Problematic: verbose and conflated with checking for a declared variable having the value `undefined`. Better: a dedicated operator or predicate for performing this check. 2. Checking that a value is neither null nor undefined. Problematic: can’t be done via only typeof currently. Better: a predicate for performing this check. This use case will become less important with default parameter values. 3. Distinguishing between objects and primitives. Problematic: Made more difficult by typeof null === "object" and typeof function () {} === "function". Better: predicates such as isObject() and isPrimitive() 4. Determining the type of a primitive value. Better: typeof is OK here, but changing it so that typeof null === "null" would help. 5. Determining the type of a value (primitive or otherwise). Better: I would want a function, e.g. getTypeName() that works like (null-enabled) typeof for primitives and returns the value of the [[Class]] property for objects. Everything except #1 can be easily implemented as functions (and be brought to ES5 via shims). A function such the #5 getTypeName() could take care of use case #4, as well. Ideas for getTypeName(): http://www.2ality.com/2011/11/improving-typeof.html -- Dr. Axel Rauschmayer a...@rauschma.de home: rauschma.de twitter: twitter.com/rauschma blog: 2ality.com
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss