ESLint allows customizing rules for errors, best practices, variable declarations, ES6, style and JS running on Node. Additionally, custom rules can be applied.
Warnings and error messages are detailed and easy to understand because of the usage of natural language throughout all warnings and messages.
For each message, the rule name is given so you can know what rule is being broken.
JSX extends JavaScript's syntax and makes code faster, safer and easier to write than using plain JavaScript. ESLint is actually the only tool of it's kind to support JSX.
Some options and rules need to be configured before using it. This is done by using JavaScript comments inside the file itself, or through a configuration file which can be either a YAML or a JSON file.
ESLint's documentation is very detailed and helpful in some parts, while in others it gets a little confusing.
For example, the rules list is easy to follow and is grouped into logical categories, while the configuration tutorials can get a little confusing.
Since it's creation, JSHint was created to be a more configurable version of JSLint (it's actually a fork of JSLint itself). Every rule is configurable through a configuration file.
JSCS needs a configuration file and a preset to start linting your code. But it's not a problem since there are a lot of pre-made presets available in their website. jQuery style, and Google coding style for example are included.
JSLint has a very strict, dogmatic ruleset that cannot be changed or warnings turned off. So much so that rarely any code will pass JSLint tests. It's reasonable to evaluate if all warning are worth changing.
Since you can't edit the rules and it's not programmed in a way to display the rule that's being broken, it's difficult to understand which rule has been broken.
Since it's relatively old (it was made in 2002) and made by Douglas Crockford, considered a JavaScript God by many JavaScript programmers. It was created to enforce what in Crockford's experience are the good parts of JavaScript. This means that it's considered by many the best way to enforce the highest standards in JavaScript.