JSHint is an open source tool which detects errors and potential problems in JavaScript code.
To lint your JavaScript you have two options.
- Atom: [linter-jshint](<https://github.com/AtomLinter/linter-jshint>) (must have [Linter](<https://github.com/steelbrain/linter>) plugin installed)        
- Sublime Text: [JSHint Gutter](<https://github.com/victorporof/Sublime-JSHint>) and/or [Sublime Linter](<https://github.com/SublimeLinter/SublimeLinter-for-ST2>)
- Vim: [jshint.vim](<https://github.com/walm/jshint.vim>) or [jshint2.vim](<https://github.com/Shutnik/jshint2.vim>)    
- Visual Studio: [VSCode JSHint](<https://github.com/Microsoft/vscode-jshint>)
A benefit of adding it to your IDE is that you can create a JSON configuration file named .jshintrc that will be used when linting your program. This is convent if you want to share configurations between projects.
Example .jshintrc file
{
    "-W097": false, // Allow "use strict" at document level
    "browser": true, // defines globals exposed by modern browsers <http://jshint.com/docs/options/#browser>
    "curly": true, // requires you to always put curly braces around blocks in loops and conditionals <http://jshint.com/docs/options/#curly>
    "devel": true, // defines globals that are usually used for logging poor-man's debugging: console, alert, etc. <http://jshint.com/docs/options/#devel>
    // List global variables (false means read only)
    "globals": {
        "globalVar": true
    },
    "jquery": true, // This option defines globals exposed by the jQuery JavaScript library.
    "newcap": false,
    // List any global functions or const vars
    "predef": [
        "GlobalFunction",
        "GlobalFunction2"
    ],
    "undef": true, // warn about undefined vars
    "unused": true // warn about unused vars
}
JSHint also allows configurations for specific lines/blocks of code
switch(operation)
{
   case '+'
   {
      result = a + b;
      break;
   }
   // JSHint W086 Expected a 'break' statement
   // JSHint flag to allow cases to not need a break
   /* falls through */
   case '*':
   case 'x':
   {
      result = a * b;
      break;
   }
}
// JSHint disable error for variable not defined, because it is defined in another file
/* jshint -W117 */
globalVariable = 'in-another-file.js';
/* jshint +W117 */
More configuration options are documented at http://jshint.com/docs/options/