Skip to content

The “arguments” object detection causes problems #8

@dmajda

Description

@dmajda

Inside the typeOf function, the arguments object is detected using the callee property:

if ( 'callee' in obj )
  // Opera: Object.prototype.toString.call(arguments) == 'Object' :(

This creates a problem in at least two situations:

  1. When dealing with regular objects containing the callee property, such as AST nodes resulting from parsing JavaScript by a parser conforming to Mozilla SpiderMonkey Parser API (or its successor, The ESTree Spec).
  2. In JavaScript strict mode, which defines (5.1, 6.0) the callee getter to throw an exception. This can be demonstrated e.g. using this code in recent Chrome: (function() { "use strict"; arguments.callee; })();).

The first case frequently bites users of the online editor at PEG.js website.

Since Object.prorotype.toString called on an arguments object returns [object Arguments] on recent versions of all common browsers (including Opera mentioned in a comment in jsDump code), I think it would be better to rewrite the detection to use it to detect arguments instead of the callee property.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions