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? Is it a performance issue or are there situations where you would want the string 'false'
to represent true
?
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? Is it a performance issue or are there situations where you would want the string 'false'
to represent true
?
6 Answers
Reset to default 11is 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.
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.
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;
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?
If you consider the Boolean values, false is false and true is true.
Boolean(true) //returns true
Boolean(false) //returns false
But when you are talking about the strings like 'true' and 'false' or any other non-empty string, Javascript will not read them as Booleans and they will be true as all other non-empty strings.
Boolean('true') //returns true
Boolean('false') //returns true
Boolean('blahblahblah') //returns true
false
is a command that always returns a non-zero error code, the double-bracketsif
construct still evaluates the stringfalse
as "truthy":if [[ false ]]; then echo ha; fi
. Only Perl, which attempts to treat strings as numbers whenever such a conversion might make sense, actually cares what the contents of a string are when determining its "truthiness", and even there"false"
is not considered false ("0"
and"undef"
are, though). – Kyle Strand Commented Sep 22, 2015 at 16:14