Movatterモバイル変換


[0]ホーム

URL:


 
» Best Practices Edit on GitHub

Best Practices

Rules which enforce generally accepted best practices.
Table of Contents

AvoidWithStatement

Since: PMD 5.0.1

Priority: High (1)

Avoid using with - it’s bad news

This rule is defined by the following XPath expression:

//WithStatement

Example(s):

with(object){property=3;// Might be on object, might be on window: who knows.}

Use this rule by referencing it:

<ruleref="category/ecmascript/bestpractices.xml/AvoidWithStatement"/>

ConsistentReturn

Since: PMD 5.0

Priority: Medium High (2)

ECMAScript does provide for return types on functions, and therefore there is no solid rule as to their usage.However, when a function does use returns they should all have a value, or all with no value. Mixed returnusage is likely a bug, or at best poor style.

This rule is defined by the following Java class:net.sourceforge.pmd.lang.ecmascript.rule.bestpractices.ConsistentReturnRule

Example(s):

// Okfunctionfoo(){if(condition1){returntrue;}returnfalse;}// Badfunctionbar(){if(condition1){return;}returnfalse;}

Use this rule by referencing it:

<ruleref="category/ecmascript/bestpractices.xml/ConsistentReturn"/>

GlobalVariable

Since: PMD 5.0

Priority: High (1)

This rule helps to avoid using accidently global variables by simply missing the "var" declaration.Global variables can lead to side-effects that are hard to debug.

This rule is defined by the following XPath expression:

//Assignment[Name/@GlobalName=true()]

Example(s):

function(arg){notDeclaredVariable=1;// this will create a global variable and trigger the rulevarsomeVar=1;// this is a local variable, that's okwindow.otherGlobal=2;// this will not trigger the rule, although it is a global variable.}

Use this rule by referencing it:

<ruleref="category/ecmascript/bestpractices.xml/GlobalVariable"/>

ScopeForInVariable

Since: PMD 5.0

Priority: High (1)

A for-in loop in which the variable name is not explicitly scoped to the enclosing scope with the ‘var’ keyword canrefer to a variable in an enclosing scope outside the nearest enclosing scope. This will overwrite theexisting value of the variable in the outer scope when the body of the for-in is evaluated. When the for-in loophas finished, the variable will contain the last value used in the for-in, and the original value from beforethe for-in loop will be gone. Since the for-in variable name is most likely intended to be a temporary name, itis better to explicitly scope the variable name to the nearest enclosing scope with ‘var’.

This rule is defined by the following XPath expression:

//ForInLoop[not(child::VariableDeclaration)]/Name[1]

Example(s):

// Okfunctionfoo(){varp='clean';function(){varobj={dirty:'dirty'};for(varpinobj){// Use 'var' here.obj[p]=obj[p];}returnx;}();// 'p' still has value of 'clean'.}// Badfunctionbar(){varp='clean';function(){varobj={dirty:'dirty'};for(pinobj){// Oh no, missing 'var' here!obj[p]=obj[p];}returnx;}();// 'p' is trashed and has value of 'dirty'!}

Use this rule by referencing it:

<ruleref="category/ecmascript/bestpractices.xml/ScopeForInVariable"/>

UseBaseWithParseInt

Since: PMD 5.0.1

Priority: High (1)

This rule checks for usages of parseInt. While the second parameter is optional and usually defaultsto 10 (base/radix is 10 for a decimal number), different implementations may behave differently.It also improves readability, if the base is given.

See also:parseInt()

This rule is defined by the following XPath expression:

//FunctionCall/Name[@Identifier='parseInt'andcount(../*)<3]

Example(s):

parseInt("010");// unclear, could be interpreted as 10 or 7 (with a base of 7)parseInt("10",10);// good

Use this rule by referencing it:

<ruleref="category/ecmascript/bestpractices.xml/UseBaseWithParseInt"/>

This documentation is written in markdown.
If there is something missing or can be improved, edit this page on github and create a PR: Edit on GitHub

©2025 PMD Open Source Project. All rights reserved.
Site last generated: Nov 28, 2025

PMD                logo


[8]ページ先頭

©2009-2025 Movatter.jp