AR.js icon indicating copy to clipboard operation
AR.js copied to clipboard

Bugs in negated `in` expressions

Open gorosgobe opened this issue 2 years ago • 0 comments

Describe the bug in and instanceof expressions in JS

a in obj;
a instanceof C;

can be negated by grouping them and applying the ! operator, i.e.

!(a in obj);
!(a instanceof C);

Applying the ! operator incorrectly (on the LHS operand) leads to bugs:

!a in obj; // will evaluate to false, unless obj has a "true" or "false" key
!a instanceof C; // will evaluate to false, unless C overrides instanceof with a @@hasInstance method

For more information, please see these MDN docs and the no-unsafe-negation recommended Eslint rule.

I have found a potentially problematic instance of the above bugs in your codebase: https://github.com/jeromeetienne/AR.js/blob/024318c67121bd57045186b83b42f10c6560a34a/three.js/examples/vendor/webvr-polyfill.js#L6245

gorosgobe avatar Sep 20 '23 11:09 gorosgobe