Misspelling Can Bite You

Discussion in 'Javascript' started by Gene Wirchenko, Feb 2, 2012.

  1. Dear JavaScripters:

    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. After all, the
    switch might have had a case to handle undefined.

    Sincerely,

    Gene Wirchenko
     
    Gene Wirchenko, Feb 2, 2012
    #1
    1. Advertisements

  2. On Fri, 3 Feb 2012 01:37:31 -0000, "Richard Cornford"
    <> wrote:

    >Gene Wirchenko wrote:
    >> Dear JavaScripters:
    >>
    >> 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. 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 -


    IE 9.

    >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.


    Huh? The sequence was syntactically correct. The only problem
    with it was a misspelling of a property name. That corrected, the
    code ran fine.

    >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:-


    I described the result of misspelling a property name, not a
    keyword.

    [snip]

    Sincerely,

    Gene Wirchenko
     
    Gene Wirchenko, Feb 3, 2012
    #2
    1. Advertisements

  3. 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:Xns9FB6521286DB8invalidcom@94.75.214.39>
     
    Thomas 'PointedEars' Lahn, Feb 3, 2012
    #3
  4. In comp.lang.javascript message <po1mi75fb0u5rqp9or413nv26799lpnndj@4ax.
    com>, Thu, 2 Feb 2012 14:02:39, Gene Wirchenko <> posted:

    > 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. After all, the
    >switch might have had a case to handle undefined.




    Putting the following script element last, or making it a body onload
    function, will list all the script words of more than 2 letters, in
    alphabetical order, with the number of times used. The result will be
    browser-dependent; but not gravely so. Demo in my js-misc1.htm.


    <script type="text/javascript">

    var skripts = document.getElementsByTagName("SCRIPT")
    var L = skripts.length, Str = "", Out = []
    while (L--) Str += skripts[L].innerHTML
    Str = Str.split(/\W+/).sort()
    var was = "", K = 0
    L = Str.length
    while (L--) {
    if (Str[L] == was) K++ ; else {
    if (was.length > 2 && /^[a-z]/i.test(was)) Out.push(K + " " + was)
    K = 1 ; was = Str[L] } }
    document.write("<pre>" + Out.reverse().join("\n") + "<\/pre>")

    </script>


    The code could, no doubt, be optimised. The output might better be to a
    textarea or a new page. It could be well to NOT scan words in strings
    or comment.


    Code could be added to pick out cases where two adjacent words are
    unreasonably similar.

    --
    (c) John Stockton, nr London, UK. ?@merlyn.demon.co.uk Turnpike v6.05.
    Website <http://www.merlyn.demon.co.uk/> - w. FAQish topics, links, acronyms
    PAS EXE etc. : <http://www.merlyn.demon.co.uk/programs/> - see in 00index.htm
    Dates - miscdate.htm estrdate.htm js-dates.htm pas-time.htm critdate.htm etc.
     
    Dr J R Stockton, Feb 3, 2012
    #4
  5. Gene Wirchenko

    Mel Smith Guest

    Dr. J said:

    > Code could be added to pick out cases where two adjacent words are
    > unreasonably similar.



    Dr J and Gene:

    This morning I was caught (and mislead) by the following set of two
    statements:

    var rgn = document.getElementById("iselectrgn") ;
    var rgnopts = rgn.getElementsByTagname("option") ;

    Because I *thought* I had checked the statements thoroughly, I looked
    everywhere *after* this set, and finally went back and checked them again
    letter-by-letter, and then ...

    -Mel Smith
     
    Mel Smith, Feb 4, 2012
    #5
  6. In comp.lang.javascript message <>, Sat,
    4 Feb 2012 13:21:14, Mel Smith <> posted:

    >Dr. J said:
    >
    >> Code could be added to pick out cases where two adjacent words are
    >> unreasonably similar.

    >
    >
    >Dr J and Gene:
    >
    > This morning I was caught (and mislead) by the following set of two
    >statements:
    >
    > var rgn = document.getElementById("iselectrgn") ;
    > var rgnopts = rgn.getElementsByTagname("option") ;
    >
    > Because I *thought* I had checked the statements thoroughly, I looked
    >everywhere *after* this set, and finally went back and checked them again
    >letter-by-letter, and then ...


    Readily found by Firefox/Opera/Safari Error Console, Chrome JavaScript
    Console, and by an IE8 pop-up, though.

    --
    (c) John Stockton, nr London, UK. ?@merlyn.demon.co.uk Turnpike 6.05 WinXP.
    Web <http://www.merlyn.demon.co.uk/> - FAQ-type topics, acronyms, and links.
    Command-prompt MiniTrue is useful for viewing/searching/altering files. Free,
    DOS/Win/UNIX now 2.0.6; see <URL:http://www.merlyn.demon.co.uk/pc-links.htm>.
     
    Dr J R Stockton, Feb 5, 2012
    #6
  7. Gene Wirchenko

    Mel Smith Guest

    Dr. J said:
    >>
    >> var rgn = document.getElementById("iselectrgn") ;
    >> var rgnopts = rgn.getElementsByTagname("option") ;
    >>
    >> Because I *thought* I had checked the statements thoroughly, I looked
    >>everywhere *after* this set, and finally went back and checked them again
    >>letter-by-letter, and then ...

    >


    > Readily found by Firefox/Opera/Safari Error Console, Chrome JavaScript
    > Console, and by an IE8 pop-up, though.


    Yes, I use IE 7 on my dev machine, and 'once-in-a-while' (when I'm
    nearing the production stage) I check out the appearance on Chrome and FF.

    However, I didn't *this* time and spent a couple of confusing and
    frustrating hours tracking down this 'devil'.

    -Mel Smith
     
    Mel Smith, Feb 6, 2012
    #7
  8. In comp.lang.javascript message <>, Mon,
    6 Feb 2012 10:28:19, Mel Smith <> posted:

    >Dr. J said:
    >>>
    >>> var rgn = document.getElementById("iselectrgn") ;
    >>> var rgnopts = rgn.getElementsByTagname("option") ;
    >>>
    >>> Because I *thought* I had checked the statements thoroughly, I looked
    >>>everywhere *after* this set, and finally went back and checked them again
    >>>letter-by-letter, and then ...

    >>

    >
    >> Readily found by Firefox/Opera/Safari Error Console, Chrome JavaScript
    >> Console, and by an IE8 pop-up, though.

    >
    > Yes, I use IE 7 on my dev machine, and 'once-in-a-while' (when I'm
    >nearing the production stage) I check out the appearance on Chrome and FF.
    >
    > However, I didn't *this* time and spent a couple of confusing and
    >frustrating hours tracking down this 'devil'.


    One fault with those Error Consoles is that they lack a "Stay On Top"
    checkbox, or one for "Jump up when written to".

    Re my earlier code : given a reference to a script element, one can get
    ..innerHTML and (in all my browsers) read as a string the script as
    transmitted. Is there any easy way of getting that string, MINUS all
    comment and MINUS all inner strings (or, in each case, removing the
    content of the comments and strings) while leaving all the other code?

    --
    (c) John Stockton, nr London, UK. ?@merlyn.demon.co.uk Turnpike 6.05 WinXP.
    Web <http://www.merlyn.demon.co.uk/> - FAQ-type topics, acronyms, and links.
    Command-prompt MiniTrue is useful for viewing/searching/altering files. Free,
    DOS/Win/UNIX now 2.0.6; see <URL:http://www.merlyn.demon.co.uk/pc-links.htm>.
     
    Dr J R Stockton, Feb 7, 2012
    #8
    1. Advertisements

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Doris Cox
    Replies:
    0
    Views:
    730
    Doris Cox
    Dec 2, 2003
  2. Dennis
    Replies:
    0
    Views:
    884
    Dennis
    Dec 2, 2003
  3. Richard Dixson
    Replies:
    1
    Views:
    812
    Joe Fallon
    May 18, 2004
  4. Dennis
    Replies:
    0
    Views:
    624
    Dennis
    Dec 2, 2003
  5. RS485 in C How to bite it?

    , Aug 10, 2007, in forum: C Programming
    Replies:
    3
    Views:
    1,066
  6. pek
    Replies:
    0
    Views:
    1,391
  7. asim malik

    Snake bite deaths highest in Sri Lanka

    asim malik, Jul 6, 2009, in forum: Javascript
    Replies:
    1
    Views:
    291
    Evertjan.
    Jul 6, 2009
  8. johannes falcone
    Replies:
    6
    Views:
    1,196
    johannes falcone
    May 16, 2013
Loading...