Andrew Poulos wrote:
> A fragment of some code I've been given has this
>
> if (typeof options.actor !== "undefined") {
> actor = options.actor;
> } else if (this.actor !== null) {
> actor = this.actor;
> }
>
> and jslint complains of the first line that
>
> "Unexpected 'typeof'. Use '===' to compare directly with undefined."
>
> but the complaint makes little sense to me.
>
> Why is typeof unexpected?
Probably because Douglas Crockford is wrong. Prior to ECMAScript Ed. 5,
when jslint was released, the “undefined” property of the Global Object was
already writable, and it was safer to compare against the result of the
“typeof” operation. Nowadays, and especially with host objects, there are
insufficient good reasons to choose a different approach.
> Why is it asking compare the string return with a primitive?
Crockford suggests that you write
if (options.actor !== undefined) {
instead. But this can only be recommended if you can assume that
“undefined” is read-only.
Ignore jslint.
That said, this should probably be written
var actor = options.actor || this.actor;
See also jsx.array.createComparator().
--
PointedEars
Twitter: @PointedEars2
Please do not Cc: me. / Bitte keine Kopien per E-Mail.