50 lines
1.3 KiB
Plaintext
50 lines
1.3 KiB
Plaintext
``++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
|
|
|
|
----
|
|
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
|
|
|
|
----
|
|
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
|
|
}
|
|
}
|
|
----
|
|
|
|
|