I understand that an empty string is falsy in javascript and a not-empty string is truthy in javascript.
However, why is \'false\'
truthy in javascript,
is there anything explicit in the specification?
Yes:
The result is false if the argument is the empty String (its length is zero); otherwise the result is true.
In Javascript any string that is not empty is truthy.
So, when evaluating any non-empty string results in true
even when the string itself is 'false'
.
You can read more about truthy and falsy values.
If you want to check a string for truthness, you can check it's length.
var val = str.length > 0;
Replying to the last part of your question:
Are there situations where you would want the string 'false' to represent true?
Let's consider I am testing for empty strings in my user input. To achieve that, I issue:
if (!theInput) {
// Do something.
}
Now do I want that condition to be true if the user enters false
in the text box? Of course, I don't.
The value of a non-empty string is always true.
Boolean(false)
returns false
Boolean('false')
returns true
It's by definition. It's a string and it is handled as such. No matter the meaning of the string.
If your logic would be applied. Then how about following examples:
"1+3==2"
"humans have four eyes"
Are they also falsy?