71 lines
1.6 KiB
Plaintext
Raw Normal View History

== Why is this an issue?
``++eval++`` is used to evaluate a string as JavaScript code, and ``++arguments++`` is used to access function arguments through indexed properties. As a consequence, ``++eval++`` and ``++arguments++`` should not be bound or assigned, because doing so would overwrite the original definitions of those two reserved words.
What's more, using either of those two names to assign or bind will generate an error in JavaScript strict mode code.
=== Noncompliant code example
2022-02-04 17:28:24 +01:00
[source,javascript]
----
eval = 17; // Noncompliant
arguments++; // Noncompliant
++eval; // Noncompliant
var obj = { set p(arguments) { } }; // Noncompliant
var eval; // Noncompliant
try { } catch (arguments) { } // Noncompliant
function x(eval) { } // Noncompliant
function arguments() { } // Noncompliant
var y = function eval() { }; // Noncompliant
var f = new Function("arguments", "return 17;"); // Noncompliant
function fun() {
if (arguments.length == 0) { // Compliant
// do something
}
}
----
=== Compliant solution
2022-02-04 17:28:24 +01:00
[source,javascript]
----
result = 17;
args++;
++result;
var obj = { set p(arg) { } };
var result;
try { } catch (args) { }
function x(arg) { }
function args() { }
var y = function fun() { };
var f = new Function("args", "return 17;");
function fun() {
if (arguments.length == 0) {
// do something
}
}
----
ifdef::env-github,rspecator-view[]
'''
== Implementation Specification
(visible only on this page)
include::message.adoc[]
include::highlighting.adoc[]
'''
== Comments And Links
(visible only on this page)
include::comments-and-links.adoc[]
endif::env-github,rspecator-view[]