";let n=document.getElementById("TableOfContents");n&&(n.innerHTML=e)}rerender(){this.rerenderFilterMenu(),this.rerenderPageContent(),this.populateRightNav(),this.runHooks("afterRerender")}rerenderPageContent(){let e={};Object.keys(this.ifFunctionsByRef).forEach(t=>{let s=this.ifFunctionsByRef[t],o=s.value,n=(0,h.reresolveFunctionNode)(s,{variables:this.selectedValsByTraitId});this.ifFunctionsByRef[t]=n,o!==n.value&&(e[t]=n.value)});let t=document.getElementsByClassName("cdoc__toggleable");for(let n=0;n{this.fitCustomizationMenuToScreen()})}addDropdownEventListeners(){let e=document.getElementsByClassName("cdoc-dropdown");for(let t=0;t{let t=e.target;for(;!t.classList.contains("cdoc-dropdown")&&t.parentElement;)t=t.parentElement;let n=t.classList.toggle("cdoc-dropdown__expanded");t.setAttribute("aria-expanded",n.toString())});document.addEventListener("keydown",e=>{if(e.key==="Enter"){let t=e.target;t.classList.contains("cdoc-filter__option")&&t.click()}}),document.addEventListener("click",t=>{for(let n=0;nthis.handleFilterSelectionChange(e));this.addDropdownEventListeners()}locateFilterSelectorEl(){let e=document.getElementById("cdoc-selector");return!!e&&(this.filterSelectorEl=e,!0)}applyFilterSelectionOverrides(){let s=Object.keys(this.selectedValsByTraitId),e=!1,t=this.browserStorage.getTraitVals();Object.keys(t).forEach(n=>{s.includes(n)&&this.selectedValsByTraitId[n]!==t[n]&&(this.selectedValsByTraitId[n]=t[n],e=!0)});let n=(0,j.getTraitValsFromUrl)({url:new URL(window.location.href),traitIds:s});return Object.keys(n).forEach(t=>{this.selectedValsByTraitId[t]!==n[t]&&(this.selectedValsByTraitId[t]=n[t],e=!0)}),e}updateEditButton(){let t=document.getElementsByClassName("toc-edit-btn")[0];if(!t)return;let e=t.getElementsByTagName("a")[0];e&&(e.href=e.href.replace(/\.md\/$/,".mdoc.md/"))}revealPage(){this.runHooks("beforeReveal"),this.filterSelectorEl&&(this.filterSelectorEl.style.position="sticky",this.filterSelectorEl.style.backgroundColor="white",this.filterSelectorEl.style.paddingTop="10px",this.filterSelectorEl.style.visibility="visible",this.filterSelectorEl.style.zIndex="1000");let e=document.getElementById("cdoc-content");e&&(e.style.visibility="visible"),this.runHooks("afterReveal")}rerenderFilterMenu(){if(!this.filterSelectorEl||!this.filtersManifest)throw new Error("Cannot rerender filter selector without filtersManifest and filterSelectorEl");let e=(0,l.resolveFilters)({filtersManifest:this.filtersManifest,valsByTraitId:this.selectedValsByTraitId});Object.keys(e).forEach(t=>{let n=e[t];this.selectedValsByTraitId[t]=n.currentValue});let t=(0,y.buildCustomizationMenuUi)(e);this.filterSelectorEl.innerHTML=t,this.fitCustomizationMenuToScreen(),this.addFilterSelectorEventListeners()}fitCustomizationMenuToScreen(){let e=document.getElementById(g);if(!e)return;let s=e.classList.contains(n),t=document.getElementById(v);if(!t)throw new Error("Dropdown menu not found");let o=document.getElementById(b);if(!o)throw new Error("Menu wrapper not found");let i=e.scrollWidth>o.clientWidth;!s&&i?(e.classList.add(n),t.classList.remove(n)):s&&!i&&(e.classList.remove(n),t.classList.add(n))}get cdocsState(){return{selectedValsByTraitId:this.selectedValsByTraitId,ifFunctionsByRef:this.ifFunctionsByRef,filtersManifest:this.filtersManifest,browserStorage:this.browserStorage,filterSelectorEl:this.filterSelectorEl}}};e.ClientFiltersManager=r,t=r,s={value:void 0}}),y=e(e=>{Object.defineProperty(e,"__esModule",{value:!0});var t=j();window.clientFiltersManager=t.ClientFiltersManager.instance}),y()})()Check for loop is moving in the right direction
Cette page n'est pas encore disponible en français, sa traduction est en cours. Si vous avez des questions ou des retours sur notre projet de traduction actuel, n'hésitez pas à nous contacter.
Metadata
ID:javascript-best-practices/for-direction
Language: JavaScript
Severity: Error
Category: Best Practices
Description
This rule prevents you from creating conditions in which a for loop might end up in an infinite loop. If you need an infinite loop, use while statements.
Non-Compliant Code Examples
// test if '++', '--'
for(vari=0;i<10;i--){}for(vari=0;i<=10;i--){}for(vari=10;i>10;i++){}for(vari=10;i>=0;i++){}// test if '+=', '-='
for(vari=0;i<10;i-=1){}for(vari=0;i<=10;i-=1){}for(vari=10;i>10;i+=1){}for(vari=10;i>=0;i+=1){}for(vari=0;i<10;i+=-1){}for(vari=0;i<=10;i+=-1){}for(vari=10;i>10;i-=-1){}for(vari=10;i>=0;i-=-1){}
Compliant Code Examples
// test if '++', '--'
for(vari=0;i<10;i++){}for(vari=0;i<=10;i++){}for(vari=10;i>0;i--){}for(vari=10;i>=0;i--){}// test if '+=', '-=',
for(vari=0;i<10;i+=1){}for(vari=0;i<=10;i+=1){}for(vari=0;i<10;i-=-1){}for(vari=0;i<=10;i-=-1){}for(vari=10;i>0;i-=1){}for(vari=10;i>=0;i-=1){}for(vari=10;i>0;i+=-1){}for(vari=10;i>=0;i+=-1){}// test if no update.
for(vari=10;i>0;){}for(vari=10;i>=0;){}for(vari=10;i<0;){}for(vari=10;i<=0;){}for(vari=10;i<=0;j++){}for(vari=10;i<=0;j--){}for(vari=10;i>=0;j++){}for(vari=10;i>=0;j--){}for(vari=10;i>=0;j+=2){}for(vari=10;i>=0;j-=2){}for(vari=10;i>=0;i|=2){}for(vari=10;i>=0;i%=2){}for(vari=0;i<MAX;i+=STEP_SIZE);for(vari=0;i<MAX;i-=STEP_SIZE);for(vari=10;i>0;i+=STEP_SIZE);// other cond-expressions.
for(vari=0;i!==10;i+=1){}for(vari=0;i===10;i+=1){}for(vari=0;i==10;i+=1){}for(vari=0;i!=10;i+=1){}
Seamless integrations. Try Datadog Code Security
Datadog Code Security
Try this rule and analyze your code with Datadog Code Security
How to use this rule
1
2
rulesets:- javascript-best-practices # Rules to enforce JavaScript best practices.
Create a static-analysis.datadog.yml with the content above at the root of your repository
Use our free IDE Plugins or add Code Security scans to your CI pipelines