jsDump icon indicating copy to clipboard operation
jsDump copied to clipboard

The “arguments” object detection causes problems

Open dmajda opened this issue 10 years ago • 0 comments

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.

dmajda avatar Nov 20 '15 15:11 dmajda