Richard Cornford wrote:
> Gene Wirchenko wrote:
>> Once again, it is time to thank me for pointing a possible
>> source of errors in JavaScript code or to chuckle over how I
>> messed up again, maybe both.
>>
>> I misspelled the name of the control variable for a switch.
>> I had
>> switch (this.DateType)
>> when it should have been
>> switch (this.DataType)
>>
>> JavaScript was quite happy to execute the code.
JavaScript may not even have been used.
>> After all,
>> the switch might have had a case to handle undefined.
>
> Really? Which browser, because the language's syntax won't stand for a -
There is not *the* language with regard to browsers, unless you consider
"JavaScript" to be a stand-in for "ECMAScript (implementations)", which is
wrong.
> case - clause inside a Block statement (and a - switch - isn't much use
> without at least one - case - clause), so there should have been a
> syntax error to prevent compilation, and so prevent any execution.
I think he meant
switch (this.bar)
{
case undefined:
…
}
where the object referred to by `this' had a `foo' property instead. Only
that in this case `foo' and `bar' were much more similar.
Barring `this' referring to a host object or `bar' being a specially
designed accessor property¹, any conforming implementation of ECMAScript Ed.
1 to 5.1 would execute that code without throwing an exception, with or
without the `case undefined' clause, because you can attempt to access any
property of the object referred to by `this' or the object converted from
the value of `this' (ES 5.x strict mode) without it throwing an exception.
Accessing a non-existing property merely results in `undefined'. (I am
presently not aware of any feature in ES 5.1 that would change that
behavior. Strict mode is not it. SpiderMonkey's __noSuchMethod__ property²
only allows it for method calls. ES Harmony is going to allow it with
dynamic proxies, but not on regular objects.³)
¹ Object.defineProperty(this, "bar", {
get: function () {
throw new TypeError();
}
});
² this.__noSuchMethod__ = function (id, args) {
throw new Error(id + "(" + args.join(", ") + ")");
};
this.bar();
³ var o = Proxy.create({
get: function (rcvr, name) {
if (name == "bar")
{
throw new TypeError();
}
}
}, this);
o.bar;
See also
<
http://www.youtube.com/watch?v=A1R8KGKkDjU&feature=plcp&context=C38a9548UDOEgsToPDskJEdhctNqhQUmYwp-
S69WbK>
> However, the situation you describe, of mistyping a keyword and still
> having code execute is a possibility. One example would be mistyping -
> if - to give:-
>
> id(x)
> {
> y = 12;
> }
>
> - which would produce a runtime error, "id is not a function", rather
> than a syntax error.
> […]
While this is valuable information indeed, I think you have misunderstood
the OP.
PointedEars
--
Sometimes, what you learn is wrong. If those wrong ideas are close to the
root of the knowledge tree you build on a particular subject, pruning the
bad branches can sometimes cause the whole tree to collapse.
-- Mike Duffy in cljs, <
news:Xns9FB6521286...@94.75.214.39>