Q:

Should "else" be used in situations where control flow renders it redundant?

I sometimes stumble upon code similar to the following example (what this function does exactly is out of the scope of this question):
function doSomething(value) {
  if (check1(value)) {
    return -1;
  }
  else if (check2(value)) {
    return value;
  }
  else {
    return false;
  }
}

As you can see, if, else if and else statements are used in conjunction with the return statement. This seems fairly intuitive to a casual observer, but I think it would be more elegant (from the perspective of a software developer) to drop the else-s and simplify the code like this:
function doSomething(value) {
  if (check1(value)) {
    return -1;
  }
  if (check2(value)) {
    return value;
  }
  return false;
}

This makes sense, as everything that follows a return statement (in the same scope) will never be executed, making the code above semantically equal to the first example.
Which of the above fits the good coding practices more? Are there any drawbacks to either method with regard to code readability?
Edit: A duplicate suggestion has been made with this question provided as reference. I believe my question touches on a different topic, as I am not asking about avoiding duplicate statements as presented in the other question. Both questions seek to reduce repetitions, albeit in slightly different ways.

A:

I think it depends on the semantics of the code. If your three cases are dependent on each other, state it explicitly. This increases readability of the code and makes it easier to understand for anyone else. Example:
if (x < 0) {
    return false;
} else if (x > 0) {
    return true;
} else {
    throw new IllegalArgumentException();
}

Here you are clearly depending on the value of x in all three cases. If you'd omit the last else, this would be less clear.
If your cases are not directly depended on each other, omit it:
if (x < 0) {
    return false;
}
if (y < 0) {
    return true;
}
return false;

It's hard to show this in a simple example without context, but I hope you get my point.

A:

I like the one without else and here's why:
function doSomething(value) {
  //if (check1(value)) {
  //  return -1;
  //}
  if (check2(value)) {
    return value;
  }
  return false;
}

Because doing that didn't break anything it wasn't supposed to.
Hate interdependence in all it's forms (including naming a function check2()).  Isolate all that can be isolated.  Sometimes you need else but I don't see that here.

A:

I prefer the second option (separate ifs with no else if and early return) BUT that is as long as the code blocks are short.
If code blocks are long it's better using else if, because otherwhise you would not have a clear understanding of the several exits points the code has.
For example:
function doSomething(value) {
  if (check1(value)) {
    // ...
    // imagine 200 lines of code
    // ...
    return -1;
  }
  if (check2(value)) {
    // ...
    // imagine 150 lines of code
    // ...
    return value;
  }
  return false;
}

In that case, it is better use else if, store the return code in a variable and have just one return sentence at the end.
function doSomething(value) {
  retVal=0;
  if (check1(value)) {
    // ...
    // imagine 200 lines of code
    // ...
    retVal=-1;
  } else if (check2(value)) {
    // ...
    // imagne 150 lines of code
    retVal=value;
  }
  return retVal;
}

But as one should strive for functions to be short, I'd say keep it short and exit early as in your first code snippet. 

